美文网首页
Swift-高效的设置圆角

Swift-高效的设置圆角

作者: SK丿希望 | 来源:发表于2019-08-07 14:33 被阅读0次
  • 使用一:
imageView.addHollowOutView(10)
  • 使用二:
imageView.addHollowOutView()
  • 使用三:
imageView.addHollowOutView(nil, nil, [UIRectCorner.topRight,UIRectCorner.bottomRight,UIRectCorner.bottomLeft])
  • 使用四:
imageView.addHollowOutView(nil,UIColor.red)
  • 实现
import UIKit

extension UIView {
    
    /// 快速添加镂空View
    ///
    /// - Parameters:
    ///   - radius: 圆角半径(nil:默认半径)
    ///   - color: 背景颜色(nil:看自己又没有就自己 没有就去取父控件的)
    ///   - corners: 切除部分(nil:默认切4角)
    func addHollowOutView(_ radius: CGFloat? = nil, _ color: UIColor? = nil, _ corners: UIRectCorner? = nil) {
        let rect = bounds
        let backgroundView = UIView(frame: rect) // 创建背景View
        backgroundView.isUserInteractionEnabled = false // 不接收事件 不然会阻挡原始事件触发
        var currentcolor = color ?? backgroundColor // 设置颜色
        if currentcolor == nil { // 如果没设置背景色
            if let superView = self.superview { // 看看父控件是否存在 存在直接用父控件背景色
                currentcolor = superView.backgroundColor
            } else { // 不然给定白色
                currentcolor = UIColor.white
            }
        }
        backgroundView.backgroundColor = currentcolor
        let currentradius:CGFloat = radius ?? rect.size.height*0.5 // 设置圆角半径
        self.addSubview(backgroundView) // 添加遮罩层
        self.bringSubviewToFront(backgroundView) // 放置到最顶层

        let maskLayer = CAShapeLayer()
        maskLayer.fillRule = CAShapeLayerFillRule.evenOdd //  奇偶层显示规则
        let basicPath = UIBezierPath(rect: rect) // 底色
        
        let radii = CGSize(width: currentradius, height: currentradius)
        let currentcorners = corners ?? [UIRectCorner.topRight,UIRectCorner.bottomRight,UIRectCorner.bottomLeft,UIRectCorner.topLeft]
        let maskPath = UIBezierPath(roundedRect: rect, byRoundingCorners: currentcorners, cornerRadii: radii) // 镂空路径
        basicPath.append(maskPath) // 重叠
        maskLayer.path = basicPath.cgPath
        backgroundView.layer.mask = maskLayer
    }
}

Dome

相关文章

网友评论

      本文标题:Swift-高效的设置圆角

      本文链接:https://www.haomeiwen.com/subject/tcpodctx.html