swift - 使用输入参数崩溃在 Swift 中子类化 CIFilter

标签 swift cifilter

class CustomFilter : CIFilter {
    var inputImage: CIImage?
    var inputRadius: CGFloat = 100.0

    override var name: String {
        return "CustomFilter"
    }

    override func setDefaults() {
        self.inputRadius = 100.0
    }

    override var outputImage: CIImage? {
        return nil
    }
}

实例化上面的过滤器会导致app抛出异常 CoreImage`-[CIFilter _crashed_when_dealloc_called_setValue_nil_forKey_probably_because_the_subclass_already_released_it:]:

有人知道怎么解决吗?

最佳答案

实际上问题是:CoreImage 试图在运行时将 CustomFilter 的所有存储属性设置为 nil(我无法解释原因)。并且由于 inputRadius 是非空的——Core Image 不能将它设置为 nil。

所以就用

var inputRadius: NSNumber? // (don't use CGFloat?)

或通过覆盖在运行时帮助框架

override func setNilValueForKey(key: String) {}

UPD。

使用 Swift 3.1,您可以使用问题中的代码,但有 1 个小异常(exception):您应该正确覆盖 name 属性:

class CustomFilter : CIFilter {
    var inputImage: CIImage?
    var inputRadius: CGFloat = 100.0
    override var name: String {
        get { return "CustomFilter" }
        set { }
    }
    override func setDefaults() {
        super.setDefaults()
        self.inputRadius = 100.0
    }

    override var outputImage: CIImage? {
        return nil
    }
}

关于swift - 使用输入参数崩溃在 Swift 中子类化 CIFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35423276/

相关文章:

ios - 具有相同原型(prototype)单元的两个 TableView,约束行为不同

ios - CIFilter 改变了 UIImage 纵横比 - SWIFT

swift - 应用 CIFilter 后图像旋转

ios - Swift:来自调试器的消息:由于内存问题而终止

iphone - CIPixellate输出图像大小不同

ios - Swift 委托(delegate)函数未被执行

objective-c - Swift NSData 初始化器

swift - 创建透明渐变并将其用作 SpriteKit 中的 alpha 蒙版

iOS:当单元格背景更改时,UITableViewCell 的侧面显示不同的颜色(Xcode 8、Swift 3)

iOS linkedin 认证