首页 > 解决方案 > 如何将 UIImage 的实例存储在 iOS 的 var 中?

问题描述

我有一个过滤器功能,ViewControlller.swift用于过滤 的图像,该图像photoImageView也存储在ViewControlller.swift. 问题是颜色过滤器正在应用于先前过滤图像的结果而不是原始图像。如何存储photoImageVieworiginalImagevar 中以将过滤器应用于该变量?

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    //MARK: Properties
    @IBOutlet weak var photoImageView: UIImageView!

    @IBAction func slideFilter(_ sender: UISlider) {

        var hueFilter = Double(sender.value)
        hueFilter = hueFilter.rounded(toPlaces: 2)

        //create image to filter
        let inputImage = CIImage(image: photoImageView.image!)

        //Create a random color to apply
        let randomColor = [kCIInputAngleKey: hueFilter]

        //Apply filter to image
        let filteredImage = inputImage!.applyingFilter("CIHueAdjust", parameters: randomColor)     

        let renderImage = context.createCGImage(filteredImage, from: filteredImage.extent)

        // Reflect the change back in the interface
        photoImageView.image = UIImage(cgImage: renderImage!)
    }
}

当我尝试photoImageView在 ViewController 中存储变量的实例时,出现此错误Cannot use instance member 'photoImageView' within property initializer; property initializers run before 'self' is available

标签: iosswiftuiimage

解决方案


我知道了!

您只需inputImageViewController. 这样任何方法都可以调用它。

设置inputImagein viewDidLoad()(以及您将要更改图像的任何位置)的值。所以过滤功能可以访问图像。

最终结果:

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    //MARK: Properties
    @IBOutlet weak var photoImageView: UIImageView!

    var inputImage:CIImage? 


    override func viewDidLoad() {
    super.viewDidLoad()
        inputImage = CIImage(image: photoImageView.image!)


    }


    @IBAction func slideFilter(_ sender: UISlider) {

        var hueFilter = Double(sender.value)
        hueFilter = hueFilter.rounded(toPlaces: 2)

        //Create a random color to apply
        let randomColor = [kCIInputAngleKey: hueFilter]

    //Apply filter to image
    let filteredImage = inputImage!.applyingFilter("CIHueAdjust", parameters: randomColor)     

    let renderImage = context.createCGImage(filteredImage, from: filteredImage.extent)

        // Reflect the change back in the interface
        photoImageView.image = UIImage(cgImage: renderImage!)
    }
}

推荐阅读