我正在尝试创建一个具有圆角和阴影的ImageView
,以给它一些深度。我能够为UIImageView
创建一个阴影,但每当我添加代码以使其具有圆角时,它只有圆角而没有阴影。我有一个名为IBOutlet
的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
设置为true
,这将绕过角落,但防止阴影出现。要解决此问题,您可以创建两个视图。容器视图应该有阴影,其子视图应该有圆角。
容器视图将clipsToBounds
设置为false
,并应用了阴影属性。如果你想要阴影也被舍入,请使用UIBezierPath
构造函数,它接受roundedRect
和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
设置为true
,并为其指定cornerRadius
。
let myImage = UIImageView(frame: outerView.bounds)
myImage.clipsToBounds = true
myImage.layer.cornerRadius = 10
最后,请记住使图像视图成为容器视图的子视图。
outerView.addSubview(myImage)
结果应如下所示:
这是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()