我正在尝试向UIView添加阴影。这是我添加阴影的代码。
func addDropShadow() {
layer.cornerRadius = 5.0
layer.masksToBounds = false
layer.shadowColor = UIColor.darkGray.cgColor
layer.shadowOpacity = 0.5
layer.shadowOffset = CGSize(width: 2, height: 2)
layer.shadowRadius = 4
layer.shadowPath = UIBezierPath(rect: bounds).cgPath
layer.shouldRasterize = true
layer.rasterizationScale = UIScreen.main.scale
}
如果设备处于纵向模式,效果很好,但是在横向模式下,阴影要么被剪掉
当我再次将设备旋转到横向时,阴影路径移出了屏幕。
我认为这可能是由于方向改变而导致的视角框架也得到了更新。因此,我在viewDidLayoutSubviews方法中更新了阴影路径属性。 但是行为保持不变。
这是我的代码
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
self.dropShadowView.layer.shadowPath = UIBezierPath(rect: self.dropShadowView.bounds).cgPath
}
我在这里做错什么了吗?
答案 0 :(得分:1)
如果将阴影设为UIView
的子类并覆盖layoutSubviews()
,您会发现管理阴影要容易得多:
@IBDesignable
class SimpleShadowedView: UIView {
override func layoutSubviews() {
super.layoutSubviews()
layer.cornerRadius = 5.0
layer.masksToBounds = false
layer.shadowColor = UIColor.darkGray.cgColor
layer.shadowOpacity = 0.5
layer.shadowOffset = CGSize(width: 2, height: 2)
layer.shadowRadius = 4
layer.shadowPath = UIBezierPath(rect: bounds).cgPath
layer.shouldRasterize = true
layer.rasterizationScale = UIScreen.main.scale
}
}
还要注意,通过添加@IBDesignable
名称,您还可以在设计时看到输出。
在“故事板/界面”构建器中将视图的“自定义类”设置为SimpleShadowedView
:
它将在运行时显示:
如果选择Editor -> Refresh All Views
(或Automatically Refresh Views
),则在设计时也会看到它。