我正在尝试向 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
}
我在这里做错了吗?
如果将其设为UIView
和 override的子类,您会发现管理阴影会容易得多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
名称,您还可以在设计时查看输出。
在 Storyboard / Interface builder 中将您的视图的自定义类设置为SimpleShadowedView
:
它会在运行时显示:
如果您选择Editor -> Refresh All Views
(或, Automatically Refresh Views
),您还将在设计时看到它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句