在学习CALayer的时候遇到渐变层无法显示的问题,寻求帮助后找到了原因
下面是原代码:
//视图3
let view3 = UIView(frame: CGRect(x: 50, y: 320, width: 100, height: 100))
view3.backgroundColor = UIColor.lightGray
let transform = view3.transform
view3.transform = transform.scaledBy(x: 1.2, y: 1.2)//对view3进行放大
view3.transform = transform.rotated(by: 3.14/4)//顺时针旋转45度
view3.layer.cornerRadius = 20 //圆角
let gradientLayer = CAGradientLayer()
gradientLayer.frame = view3.frame //给视图上渐变层
let fromColor = UIColor.purple.cgColor
let midColor = UIColor.red.cgColor
let toColor = UIColor.yellow.cgColor
gradientLayer.colors = [fromColor,midColor,toColor]
gradientLayer.startPoint = CGPoint(x: 0, y: 0)
gradientLayer.endPoint = CGPoint(x: 1, y: 1)
gradientLayer.locations = [0,0.3,1]
view3.layer.addSublayer(gradientLayer)
view3.clipsToBounds = true //渐变切边
执行后并未在原本的四边形上形成 CALayer的渐变层,在整个窗口中也没有显示。
寻找到错误代码:
gradientLayer.frame = view3.frame
错误原因:
原本的view3 相对于父视图存在偏移,而用frame设置属性则使grandientLayer相对于view3进行偏移,所以造成渐变层偏移甚至消失。
将代码修改为:
gradientLayer.frame = view3.bounds
运行结果:
就可以正常运行了