在横向和纵向模式下向 UIView 添加投影

瓦巴夫

我正在尝试向 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章