我想在UIView的阴影层中“切出一个洞”,Swift3,iOS
我有一个容器(UIView),有2个子容器:
我想给覆盖了一层阴影,并切出阴影的内矩形,创建一个辉光像在ImageView的边缘效果 ,这是至关重要的辉光插图,由于图像拍摄屏幕宽度 我的代码至今:
let glowView = UIView(frame: CGRect(x: 0, y: 0, width: imageWidth, height: imageHeight)) glowView.layer.shadowPath = UIBezierPath(roundedRect: container.bounds, cornerRadius: 4.0).cgPath glowView.layer.shouldRasterize = true glowView.layer.rasterizationScale = UIScreen.main.scale glowView.layer.shadowOffset = CGSize(width: 1.0, height: 1.0) glowView.layer.shadowOpacity = 0.4 container.addSubview(imageView) container.addSubview(glowView)
现在的结果如下所示:
现在,我想剪掉较暗的内部部分,以便仅保留边缘的阴影。 知道如何实现这一点吗?
这些天来很容易做到这一点:
这就是全部
import UIKit class GlowBox: UIView { override func layoutSubviews() { super.layoutSubviews() backgroundColor = .clear layer.shadowOpacity = 1 layer.shadowColor = UIColor.red.cgColor layer.shadowOffset = CGSize(width: 0, height: 0) layer.shadowRadius = 3 let p = UIBezierPath( roundedRect: bounds.insetBy(dx: 0, dy: 0), cornerRadius: 4) let hole = UIBezierPath( roundedRect: bounds.insetBy(dx: 2, dy: 2), cornerRadius: 3) .reversing() p.append(hole) layer.shadowPath = p.cgPath } }
当您添加(即 .append)两个类似的贝塞尔曲线路径时…
.append
第二个必须是“正常”或“反转”。
请注意结尾处的代码行:
.reversing()
像大多数程序员一样,如果在不同情况下应该是“正常”或“逆向” , 我将永远无法记住 !
简单的解决方案…
很简单,两者都尝试!
只需在有或没有的情况下尝试 .reversing()
它将以一种或另一种方式工作!:)