ios - UIKit:如何将多个 CALayer 混合到一个视图层中?
问题描述
我想将几个子层混合成一层。如果我只是将我的修改分配给视图层,它可以正常工作:
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
但现在这是我得到的结果
现在白色视图周围没有阴影。为什么会这样?
谢谢您的帮助
解决方案
您的代码的主要问题是您的所有层都没有任何大小。因此,例如,您看不到阴影,因为图层本身在左上角的大小为零,因此没有任何东西可以投射任何阴影。
frame
创建图层后立即为其添加一个图层是您的工作!通常这将与超层的相同bounds
。但是请记住,与视图不同的是,当视图或超层调整大小时,子层不会。因此,如果您不采取措施纠正它,子层可能会停止正确“适应”其超层。
推荐阅读
- sharepoint - Sharepoint 列表和上传到 Sharepoint 的每月 excel 文件之间的核对
- regex - 解析 XHTML,替换图片路径并关闭图片标签
- c++ - 潜在未定义类型的 C++ 类型、函数和值别名
- python - 手动计算 IEEE-754 浮点分数并拆分位 - Python
- c# - 根据另一个 ComboBox C# 中的更改 ComboBox 启用状态
- machine-learning - 让 RESNet18 处理 float32 数据
- powershell - Powershell 脚本;键盘记录器,需要帮助!任何有PS知识的人
- notifications - Android 11 中的简短通知不起作用
- android-studio - 接收蓝牙音频信号作为 SpeechRecognizer 的麦克风输入
- javascript - imgur api图片上传跨域资源共享错误