【问题标题】:Setting up CIFilter in Swift在 Swift 中设置 CIFilter
【发布时间】:2017-07-10 17:58:11
【问题描述】:

如何将以下 ObjC 代码的最后一行翻译成 Swift:

CGAffineTransform transform = CGAffineTransformIdentity;
CIFilter *clampFilter = [CIFilter filterWithName:@"CIAffineClamp"];

[clampFilter setValue:[NSValue valueWithBytes:&transform objCType:@encode(CGAffineTransform)] forKey:@"inputTransform"];

下面一行

clampFilter.setValue(transform, forKey: "inputTransform")

生产

Type 'CGAffineTransform' does not conform to protocol 'AnyObject'

【问题讨论】:

    标签: ios objective-c swift core-image


    【解决方案1】:

    NSValue 有一个带有 CGAffineTransform 参数的构造函数:

    let transform = CGAffineTransformIdentity
    let clampFilter = CIFilter(name: "CIAffineClamp")
    
    let val = NSValue(CGAffineTransform: transform)
    clampFilter.setValue(val, forKey: "inputTransform")
    

    Swift 3 更新:

    let transform = CGAffineTransform.identity
    let clampFilter = CIFilter(name: "CIAffineClamp")!
    let val = NSValue(cgAffineTransform: transform)
    clampFilter.setValue(val, forKey: "inputTransform")
    

    【讨论】:

    • 它在 Swift 3.1 中崩溃了。你能发布任何 CIAffineClamp 或 CIAffineTile 的例子吗?
    • @ChanWarde:请检查更新是否适合您。
    • 你好@Martin R,即使只有 TileEffect 中的“CIKaleidoscope”对我有用,它也不起作用。所有其他过滤器都返回零图像。我没有找到任何示例、问题或参考。能否请您添加一些代码。或者我应该为它添加一个新问题??
    • @ChanWarde:我建议提出一个新问题。不要忘记添加您尝试过的代码以及失败的清晰描述。
    【解决方案2】:

    这可能会。

    var transform = CGAffineTransformIdentity;
    var clampFilter = CIFilter(name: "CIAffineClamp")
    var value = NSValue(CGAffineTransform: transform)
    clampFilter.setValue(value, forKey: "inputTransform")
    

    【讨论】:

    • 您应该始终在 swift 中使用let,除非您将来特别要更改该值。
    猜你喜欢
    • 2015-05-12
    • 1970-01-01
    • 2020-08-11
    • 2016-12-13
    • 2012-07-24
    • 1970-01-01
    • 2017-01-04
    • 2016-10-16
    • 1970-01-01
    相关资源
    最近更新 更多