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

问题描述 投票:13回答:2

我正在尝试创建一个具有圆角和阴影的ImageView,以给它一些深度。我能够为UIImageView创建一个阴影,但每当我添加代码以使其具有圆角时,它只有圆角而没有阴影。我有一个名为IBOutletmyImage,它位于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
}
ios swift uiview uiimageview shadow
2个回答
66
投票

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

容器视图将clipsToBounds设置为false,并应用了阴影属性。如果你想要阴影也被舍入,请使用UIBezierPath构造函数,它接受roundedRectcornerRadius

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设置为true,并为其指定cornerRadius

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

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

outerView.addSubview(myImage)

结果应如下所示:

enter image description here


5
投票

这是swift 2.0中的另一个解决方案(测试代码)

如果将clipsToBounds设置为true,则会对角进行圆角处理,但会阻止阴影出现。因此,您可以在imageview后面的storyboard中添加相同大小的视图,我们可以为该视图添加阴影

SWIFT 2.0

outerView.layer.cornerRadius = 20.0
outerView.layer.shadowColor = UIColor.blackColor().CGColor
outerView.layer.shadowOffset = CGSizeMake(0, 2)
outerView.layer.shadowOpacity = 1
outerView.backgroundColor = UIColor.whiteColor()
© www.soinside.com 2019 - 2024. All rights reserved.