Ash*_*lls 5 ios cifilter swift
我正在尝试创建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)
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
似乎指定的初始化程序是init(coder aDecoder: NSCoder!)由于CIFilter符合NSCoding协议,而不是init(name: String!)在的扩展名中声明的CIFilter。
我可以通过添加以下内容来消除第一个错误:
required init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
}
Run Code Online (Sandbox Code Playgroud)
(尽管这似乎有些多余!)
有没有办法解决第二个问题?
我想在这里实现的是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;
}
Run Code Online (Sandbox Code Playgroud)
你的 Objective-C 类方法
+ (ASHColorMonochromeFilter *) filterWithRed: (CGFloat) red green:(CGFloat)green blue:(CGFloat)blue
Run Code Online (Sandbox Code Playgroud)
实际上返回 的(子类)的实例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)
}
}
Run Code Online (Sandbox Code Playgroud)
这被称为
let filter = CIFilter(red: 0.1, green: 0.2, blue: 0.3)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1199 次 |
| 最近记录: |