在Swift中传递颜色时CIFilter CISmoothLinearGradient崩溃

时间:2018-02-06 19:48:26

标签: swift gradient uicolor cifilter

我正在尝试在iOS应用程序中使用CISmoothLinearGradient,并且它似乎不喜欢第二个inputColor,无论我放入什么,可能是因为alpha参数。

我已经尝试了其他几种设置CIFilter的方法,但我用它来确定问题出现的位置:

    let gradientFilter = CIFilter(name: "CISmoothLinearGradient")
    gradientFilter?.setDefaults()
    gradientFilter?.setValue([0, 0], forKey: "inputPoint0")
    gradientFilter?.setValue(inputPoint1Vector, forKey: "inputPoint1")
    gradientFilter?.setValue(UIColor.black, forKey: "inputColor0")
    gradientFilter?.setValue(UIColor(red: 1, green: 1, blue: 1, alpha: 1), forKey: "inputColor1") // crash

控制台说明: - [UICachedDeviceWhiteColor alpha]:无法识别的选择器发送到实例0x1c4259830

最初我使用的是UIColor.white,但它仍然显示UICachedDeviceWhiteColor错误。

1 个答案:

答案 0 :(得分:1)

在这种情况下,CIColor和CIVector将完成工作。

根据需要替换RGB和x,y的值

        var color1 = CIColor(red: 238/255, green: 97/255, blue: 35/255, alpha: 1)
        var color2 = CIColor(red: 246/255, green: 66/255, blue: 227/255, alpha: 1)

        let gradientFilter = CIFilter(name: "CISmoothLinearGradient")
        gradientFilter?.setDefaults()
        gradientFilter?.setValue(CIVector(x: 0, y: 0), forKey: "inputPoint0")
        gradientFilter?.setValue(CIVector(x: 200, y: 200), forKey: "inputPoint1")
        gradientFilter?.setValue(color1, forKey: "inputColor0")
        gradientFilter?.setValue(color2, forKey: "inputColor1")