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
}
}
Run Code Online (Sandbox Code Playgroud)
实例化上述过滤器将导致应用程序引发异常
CoreImage`-[CIFilter _crashed_when_dealloc_called_setValue_nil_forKey_probably_because_the_subclass_already_released_it:]:
有人知道如何解决吗?
实际的问题是:CoreImage试图在运行时将CustomFilter的所有存储属性设置为nil(我无法解释原因)。并且由于inputRadius为非null-核心映像不能将其设置为nil。
所以就用
var inputRadius: NSNumber? // (don't use CGFloat?)
Run Code Online (Sandbox Code Playgroud)
或通过覆盖在运行时帮助框架
override func setNilValueForKey(key: String) {}
Run Code Online (Sandbox Code Playgroud)
UPD。
在Swift 3.1中,您可以使用问题中的代码,但有1个小例外:您应该正确地覆盖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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
455 次 |
| 最近记录: |