我试图按照以下步骤创建的CIFilter
一个子类子类CIFilter:在斯威夫特
class ColorMonochromeFilter: CIFilter {
required init(red: CGFloat!, green: CGFloat!, blue: CGFloat!) {
super.init(name: "ColorMonochrome")
setDefaults()
let colour = UIColor(red: red, green: green, blue: blue, alpha: 1.0)
setValue(colour, forKey: kCIInputColorKey)
}
}
我收到以下错误信息:
- 班“ColorMonochromeFilter”不实现其超类的 必需成员
- 必须调用 超类“CIFilter”的指定初始值设定项
看来,指定初始化剂是init(coder aDecoder: NSCoder!)
由于CIFilter
符合NSCoding
协议,而不是init(name: String!)
其在上CIFilter
扩展声明。
我可以通过添加删除第一个错误:
required init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
}
(尽管这似乎有点多余!)
有没有解决的第二个问题的方法吗?
我想在这里实现的是这样做的雨燕相当于:
@implementation ASHColorMonochromeFilter
+ (ASHColorMonochromeFilter *) filterWithRed: (CGFloat) red green:(CGFloat)green blue:(CGFloat)blue
{
ASHColorMonochromeFilter * filter = (ASHColorMonochromeFilter *)[ASHColorMonochromeFilter filterWithName: @"CIColorMonochrome"];
UIColor * color = [UIColor colorWithRed: red green: green blue: blue alpha: 1.0];
[filter setValue: color forKey: kCIImageColorSpace];
return filter;
}
你真的想继承CIFilter以添加/覆盖方法,或者你只需要一个额外的初始化器? – 2014-08-29 18:12:44
那么,在这种情况下,我想了解如何实现上述目标,如果可能的话 - 或者我的知识存在差距。 – 2014-08-29 19:35:33
我不是这方面的专家,但据我了解,'init(name:“ColorMonochrome”)'加载了一个预定义的过滤器,所以子类化可能没有意义。在一个子类中,你只需要调用'super.init()'。 - 如果您只需要ColorMonochrome过滤器的附加初始化程序,那么您可以定义一个扩展。 (我已经用一个例子准备了答案,但我不确定这是否是您需要的。) – 2014-08-29 19:39:25