UIKit:如何将多个 CALayer 混合到一个视图层中?
UIKit: How to mix several CALayers into one view layer?
我想将几个子图层混合到一个图层中。
如果我只是将我的修改分配给视图层,它工作正常:
testView.layer.cornerRadius = 15.0
testView.layer.shadowColor = UIColor.yellow.withAlphaComponent(1.0).cgColor
testView.layer.shadowOpacity = 1.0
testView.layer.shadowRadius = 24.0
testView.layer.shadowOffset = .zero
testView.backgroundColor = .white
然后,我尝试了这个:
testView.layer.cornerRadius = 15.0
// sl1
let layer1 = CALayer()
layer1.shadowColor = UIColor.yellow.withAlphaComponent(1.0).cgColor
layer1.shadowOpacity = 1.0
layer1.shadowRadius = 24.0
layer1.shadowOffset = .zero
// sl2
let layer2 = CALayer()
layer2.shadowColor = UIColor.red.withAlphaComponent(1.0).cgColor
layer2.shadowOpacity = 1.0
layer2.shadowRadius = 24.0
layer2.shadowOffset = .zero
// sublayers
let layer = CALayer()
testView.layer.sublayers = [layer1, layer2]
testView.backgroundColor = .white
但现在这是我得到的结果
白色视图周围现在没有阴影。为什么会这样?
感谢您的帮助
您的代码的主要问题是 none 层的大小不限。因此,例如你看不到阴影,因为层本身在左上角的大小为零,所以没有任何东西可以投射任何阴影。
您的工作是在图层创建后立即赋予它 frame
!通常这与超级层的 bounds
相同。但是请记住,与视图不同,当视图或超层调整大小时,子层不会。因此,如果您不采取措施纠正这一点,子层可能会停止“适合”其上层。
我想将几个子图层混合到一个图层中。 如果我只是将我的修改分配给视图层,它工作正常:
testView.layer.cornerRadius = 15.0
testView.layer.shadowColor = UIColor.yellow.withAlphaComponent(1.0).cgColor
testView.layer.shadowOpacity = 1.0
testView.layer.shadowRadius = 24.0
testView.layer.shadowOffset = .zero
testView.backgroundColor = .white
然后,我尝试了这个:
testView.layer.cornerRadius = 15.0
// sl1
let layer1 = CALayer()
layer1.shadowColor = UIColor.yellow.withAlphaComponent(1.0).cgColor
layer1.shadowOpacity = 1.0
layer1.shadowRadius = 24.0
layer1.shadowOffset = .zero
// sl2
let layer2 = CALayer()
layer2.shadowColor = UIColor.red.withAlphaComponent(1.0).cgColor
layer2.shadowOpacity = 1.0
layer2.shadowRadius = 24.0
layer2.shadowOffset = .zero
// sublayers
let layer = CALayer()
testView.layer.sublayers = [layer1, layer2]
testView.backgroundColor = .white
但现在这是我得到的结果
白色视图周围现在没有阴影。为什么会这样?
感谢您的帮助
您的代码的主要问题是 none 层的大小不限。因此,例如你看不到阴影,因为层本身在左上角的大小为零,所以没有任何东西可以投射任何阴影。
您的工作是在图层创建后立即赋予它 frame
!通常这与超级层的 bounds
相同。但是请记住,与视图不同,当视图或超层调整大小时,子层不会。因此,如果您不采取措施纠正这一点,子层可能会停止“适合”其上层。