我正在使用swift 2,并在遵循一个教程使用选择器选择图像然后在按下按钮时应用过滤器时遇到一个奇怪的问题。

我的过程是这样的:


单击一个按钮以使用imagePickerControl选择图像
在图像视图的图像中显示它
单击按钮以处理过滤器
在那个图像上


这是图像选择器的代码:

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {
        if let pickedImage = image as? UIImage {
            imageView.contentMode = .ScaleAspectFit
            imageView.image = pickedImage
        }
        dismissViewControllerAnimated(true, completion: nil)
    }


这部分进行处理/过滤:

func setProcessFilter() {
        var originalImage = CIImage(image: imageView.image!)
        if originalImage !== nil {
            var filter = CIFilter(name: "CIPhotoEffectProcess")
            filter?.setDefaults()
            filter?.setValue(originalImage, forKey: kCIInputImageKey)
            var imageOutput = filter!.outputImage
            var newImage = UIImage(CIImage: imageOutput!)
            imageView.image = newImage
        } else {
            print("problem!")
        }
    }


有趣的是,这在第一次单击按钮时有效,但是第二次originalImage变为零。我不确定为什么会这样吗?

Here is my full code

最佳答案

对于在学习教程时遇到此问题的任何人,只需创建一个变量:

var filterImage : CIImage!


并且一旦imagepicker选择了图像,将其推到那里:

    func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {
    if let pickedImage = image as? UIImage {
        imageView.contentMode = .ScaleAspectFit
        filterImage = CIImage(image: pickedImage)
        imageView.image = pickedImage
    }
    dismissViewControllerAnimated(true, completion: nil)
}

关于ios - imageView UIimage返回nil,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32319917/

10-12 00:00