代码之家  ›  专栏  ›  技术社区  ›  l30c0d35

Swift:UIVisualEffectView,具有圆形顶边和彩色边框

  •  1
  • l30c0d35  · 技术社区  · 6 年前

    我试图建立一个圆角视图,但只有左上角和右上角和彩色边框。这是我的观点课:

    class PullUpOverview: UIVisualEffectView {
    
    override init(effect: UIVisualEffect?) {
        super.init(effect: effect)
    
        let maskLayer = CAShapeLayer()
        maskLayer.path = UIBezierPath(roundedRect: bounds,
                                      byRoundingCorners: [.topRight, .topLeft],
                                      cornerRadii: CGSize(width: 25, height: 25)).cgPath
        layer.mask = maskLayer
    
        let borderLayer = CAShapeLayer()
        borderLayer.frame = bounds
        borderLayer.path = maskLayer.path
        borderLayer.lineWidth = 1
        borderLayer.strokeColor = UIColor.gray.cgColor
        borderLayer.fillColor = UIColor.clear.cgColor
        layer.addSublayer(borderLayer)
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    }
    

    我将视图添加到 viewDidLoad 像这样的方法( overviewRect

    let overview = PullUpOverview(effect: UIBlurEffect(style: UIBlurEffect.Style.extraLight))
    overview.frame = overviewRect
    self.mapView.addSubview(overview)
    

    但是如果我添加视图,什么都不会出现。如果我改变主意 PullUpOverview 视图加载 UIVisualEffectView

    let overview = PullUpOverview(frame: overviewRect)
    self.mapView.addSubview(overview)
    

    所以我需要做什么改变才能得到一个UIVisualEffectView,它有两个圆角(都是顶角)和一个边界层?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Kamran    6 年前

    这个 size zero 对于 bounds 所以这两层都不可见。您可以引入如下自定义初始值设定项,

    class PullUpOverview: UIVisualEffectView {
    
        init(effect: UIVisualEffect?, size: CGSize) {
            super.init(effect: effect)
    
            let rect = CGRect(origin: .zero, size: size)
    
            let maskLayer = CAShapeLayer()
            maskLayer.path = UIBezierPath(roundedRect: rect,
                                          byRoundingCorners: [.topRight, .topLeft],
                                          cornerRadii: CGSize(width: 25, height: 25)).cgPath
            maskLayer.frame = rect
            layer.mask = maskLayer
    
            let borderLayer = CAShapeLayer()
            borderLayer.frame = rect
            borderLayer.path = maskLayer.path
            borderLayer.lineWidth = 1
            borderLayer.strokeColor = UIColor.yellow.cgColor
            borderLayer.fillColor = UIColor.clear.cgColor
            layer.addSublayer(borderLayer)
        }
    
        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
    }
    

    现在你可以初始化并添加这个 view 作为,

    let overviewRect = CGRect(origin: CGPoint(x: 100, y: 200), size: CGSize(width: 200, height: 200))
    let overview = PullUpOverview(effect: UIBlurEffect(style: .dark), size: overviewRect.size)
    overview.frame = overviewRect
    self.view.addSubview(overview)
    

    enter image description here