在横向和纵向模式下向 UIView 添加投影
Adding drop shadow to UIView on landscape and portrait mode
我正在尝试向 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
的子类并覆盖 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
名称,您还可以在设计时看到输出。
将情节提要/界面生成器中视图的自定义 Class 设置为 SimpleShadowedView
:
运行时会显示:
如果您 select Editor -> Refresh All Views
(或 Automatically Refresh Views
),您也会在设计时看到它。
我正在尝试向 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
的子类并覆盖 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
名称,您还可以在设计时看到输出。
将情节提要/界面生成器中视图的自定义 Class 设置为 SimpleShadowedView
:
运行时会显示:
如果您 select Editor -> Refresh All Views
(或 Automatically Refresh Views
),您也会在设计时看到它。