我试图创建一个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)
}
}我收到以下错误消息:
指定的初始化项似乎是init(coder aDecoder: NSCoder!),因为CIFilter符合NSCoding协议,而不是在CIFilter上的扩展中声明的init(name: String!)。
我可以通过添加以下内容来删除第一个错误:
required init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
}(虽然这似乎有点多余!)
有没有办法解决第二个问题?
我在这里试图实现的是Swift的等价物:
@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;
}发布于 2014-08-29 22:09:38
你的目标-C类方法
+ (ASHColorMonochromeFilter *) filterWithRed: (CGFloat) red green:(CGFloat)green blue:(CGFloat)blue返回CIFilter (一个子类)的实例。在Swift中,也可以使用方便的初始化器来实现同样的功能。
extension CIFilter {
convenience init(red: CGFloat, green: CGFloat, blue: CGFloat) {
self.init(name:"CIColorMonochrome")
setDefaults()
let colour = UIColor(red: red, green: green, blue: blue, alpha: 1.0)
setValue(colour, forKey: kCIInputColorKey)
}
}它被称为
let filter = CIFilter(red: 0.1, green: 0.2, blue: 0.3)https://stackoverflow.com/questions/25572792
复制相似问题