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

标签 ios swift uiview uiimageview shadow

我正在尝试创建一个具有圆角和阴影的ImageView,以赋予其一定的深度。我能够为 UIImageView 创建阴影,但每当我添加代码以使其具有圆角时,它只有圆角而没有阴影。我有一个名为 myImageIBOutlet,它位于 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,这将圆角但防止出现阴影。为了解决这个问题,您可以创建两个 View 。容器 View 应该有阴影,其 subview 应该有圆角。

容器 View 将 clipsToBounds 设置为 false,并应用了阴影属性。如果您还希望阴影呈圆形,请使用接受 roundedRectcornerRadiusUIBezierPath 构造函数。

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

接下来,将 ImageView (或任何其他类型的UIView)设置为与容器 View 相同的大小,将clipsToBounds设置为true,并给它一个 cornerRadius

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

最后,记住使 ImageView 成为容器 View 的 subview 。

outerView.addSubview(myImage)

结果应该是这样的:

enter image description here

关于ios - 为具有圆角的 UIImageView 创建阴影?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58559362/

相关文章:

iOS在UIView上闪烁动画的次数有限

ios - UIView 上的 inputAccessoryView

ios - Objective c - 尝试在队列中复制 NSArray 时获取 exc_bad_access

ios - Swift,UILongPressGestureRecognizer 在 UIlabel 中不起作用

ios - 未找到 Package.swift list ("has no Package.swift manifest for ...")

ios - 如何为 QBChat 设置 currentUser()?

ios - 使用自动布局以编程方式将自定义 UIView 居中

ios - 如何检查一个 View 是否在另一个 View 之上?

iOS ionic 应用程序状态栏旋转问题

ios - 使用 UISwitch 的 GIDSignIn