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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为具有圆角的UIImageView创建阴影?相关的知识,希望对你有一定的参考价值。

我正在尝试创建一个具有圆角和阴影的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
}
答案

如果你将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

另一答案

这是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()

以上是关于为具有圆角的UIImageView创建阴影?的主要内容,如果未能解决你的问题,请参考以下文章

具有角半径和阴影的 SWIFT UITableViewCell

如何使 UICollectionViewCells 具有圆角和阴影?

可可绘制带圆角和阴影的图像

如何使用圆角和边框宽度去除 UIImageView 上的黑边?

wpf窗体设置阴影后,窗体圆角就会有阴影颜色,圆角就失效了,如何解决啊?求解

我可以在 iTunes 1024 图标上应用圆角和阴影吗?