gpt4 book ai didi

ios - 在 Swift 中子类化 CIFilter

转载 作者:搜寻专家 更新时间:2023-10-31 08:34:29 24 4
gpt4 key购买 nike

我正在尝试创建一个 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)
}
}

我收到以下错误消息:

  1. “ColorMonochromeFilter”类未实现其父类(super class)的必需的成员
  2. 必须调用父类(super class)“CIFilter”

由于 CIFilter 符合 NSCoding 协议(protocol),似乎指定的初始化程序是 init(coder aDecoder: NSCoder!),而不是 init(name: String!)CIFilter 的扩展中声明。

我可以通过添加以下内容来删除第一个错误:

    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;
}

最佳答案

您的 Objective-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)

关于ios - 在 Swift 中子类化 CIFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25572792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com