将CAGradientLayer与径向渐变配合使用时,怪异的渐变。

时间:2018-10-25 03:17:20

标签: ios core-animation cagradientlayer

使用代码:

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let v = View()
        view.addSubview(v)
        v.frame = CGRect(x: 100, y: 100, width: 200, height: 200)
    }
}

class View : UIView {
    let gradientLayer = CAGradientLayer()
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.backgroundColor = .blue

        gradientLayer.frame = CGRect(x: 0, y: 0, width: 200, height: 200)
        gradientLayer.startPoint = CGPoint(x: 0, y: 0.5)
        gradientLayer.endPoint = CGPoint(x: 1, y: 0.5)
        gradientLayer.type = .radial
        gradientLayer.colors = [
            UIColor.red.cgColor,
            UIColor.green.cgColor
        ]
        self.layer.addSublayer(gradientLayer)
    }
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
}

期望(由Sketch生成): enter image description here

iOS 12模拟器上的

代码结果: enter image description here

在真实的iOS设备上编码结果: enter image description here

我的Xcode版本是10.0(10A255),我发现问题仅在  startPoint.x == endPoint.x || startPoint.y == endPoint.y

1 个答案:

答案 0 :(得分:2)

当startPoint和endPoint的y相等时,这意味着渐变椭圆的高度将为0。

在您的代码段中,您可以将entPoint的y设置为1以实现Sketch效果。

在QuartzCore框架中,有以下注释:

  

/ *径向渐变。渐变定义为带有其椭圆的椭圆        *以“ startPoint”为中心,其宽度和高度由        *'((endPoint.x-startPoint.x)* 2'和'(endPoint.y-startPoint.y)*        * 2'。 * /

     

@available(iOS 3.2,*)

     

公共静态让径向:CAGradientLayerType