Ios 使用带有径向渐变的CAGradientLayer时会出现奇怪的渐变。

Ios 使用带有径向渐变的CAGradientLayer时会出现奇怪的渐变。,ios,core-animation,cagradientlayer,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 : UIV

使用代码:

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)
    }
}
expect(由草图生成):

iOS 12模拟器上的代码结果:

真实iOS设备上的代码结果:

我的Xcode版本是10.0(10A255),我发现只有当
startPoint.x==endPoint.x | | startPoint.y==endPoint.y

当startPoint和endPoint的y相等时,表示渐变椭圆的高度为0

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

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

/*径向梯度。梯度被定义为一个椭圆,其 *中心位于“起始点”,其宽度和高度由 *“(endPoint.x-startPoint.x)*2”和“(endPoint.y-startPoint.y)* *分别为2英尺*/

@可用(iOS 3.2,*)

公共静态let-radial:CAGradientLayerType


当起点和终点的y相等时,表示渐变椭圆的高度为0

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

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

/*径向梯度。梯度被定义为一个椭圆,其 *中心位于“起始点”,其宽度和高度由 *“(endPoint.x-startPoint.x)*2”和“(endPoint.y-startPoint.y)* *分别为2英尺*/

@可用(iOS 3.2,*)

公共静态let-radial:CAGradientLayerType


入口点的y应为1.5入口点的y应为1.5