为具有圆角的 UIImageView 创建阴影?

2023-12-07

我正在尝试创建一个ImageView它有圆角和阴影以赋予它一些深度。我能够为UIImageView,但是每当我添加代码以使其具有圆角时,它只有圆角而没有阴影。我有一个IBOutlet named myImage,并且它位于viewDidLoad功能。有人对如何使其发挥作用有任何想法吗?我究竟做错了什么?

override func viewDidLoad() {
    super.ViewDidLoad() 
    myImage.layer.shadowColor = UIColor.black.cgColor
    myImage.layer.shadowOpacity = 1 
    myImage.layer.shadowOffset = CGSize.zero
    myImage.layer.shadowRadius = 10
    myImage.layer.shadowPath = UIBezierPath(rect: myImage.bounds).cgPath
    myImage.layer.shouldRasterize = false
    myImage.layer.cornerRadius = 10
    myImage.clipsToBounds = true
}

如果你设置clipsToBounds to true,这将使拐角变圆,但可以防止出现阴影。为了解决这个问题,您可以创建两个视图。容器视图应该有阴影,其子视图应该有圆角。

容器视图有clipsToBounds set to false,并应用了阴影属性。如果您也希望阴影变圆,请使用UIBezierPath构造函数接受一个roundedRect and cornerRadius.

let outerView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
outerView.clipsToBounds = false
outerView.layer.shadowColor = UIColor.black.cgColor
outerView.layer.shadowOpacity = 1
outerView.layer.shadowOffset = CGSize.zero
outerView.layer.shadowRadius = 10
outerView.layer.shadowPath = UIBezierPath(roundedRect: outerView.bounds, cornerRadius: 10).cgPath

接下来,设置图像视图(或任何其他类型的UIView) 与容器视图大小相同,设置clipsToBounds to true,并给它一个cornerRadius.

let myImage = UIImageView(frame: outerView.bounds)
myImage.clipsToBounds = true
myImage.layer.cornerRadius = 10

最后,记住使图像视图成为容器视图的子视图。

outerView.addSubview(myImage)

结果应该是这样的:

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为具有圆角的 UIImageView 创建阴影? 的相关文章

随机推荐