代码之家  ›  专栏  ›  技术社区  ›  Saeed Rahmatolahi

如何在Swift 4中检测到某些边缘的拐角半径?

  •  0
  • Saeed Rahmatolahi  · 技术社区  · 7 年前

    所以这里的代码工作得很好

    let path = UIBezierPath(roundedRect:viewToRound.bounds,
                        byRoundingCorners:[.topRight, .bottomLeft],
                        cornerRadii: CGSize(width: 20, height:  20))
    
    let maskLayer = CAShapeLayer()
    
    maskLayer.path = path.cgPath
    viewToRound.layer.mask = maskLayer
    

    但是我需要在代码中多次使用它,所以我创建了视图类,并希望在IBinspectable中使用它作为可选的每个边,以更改故事板中的角半径,所以我使用了这个,但故事板中没有显示它。

    @IBInspectable
    open var cornerEdges: CGSize {
        get {
            let path = UIBezierPath(roundedRect:self.bounds,
                                    byRoundingCorners:[.topRight, .bottomLeft],
                                    cornerRadii: CGSize(width: 20, height:  20))
    
            let maskLayer = CAShapeLayer()
    
            maskLayer.path = path.cgPath
            self.layer.mask = maskLayer
            return maskLayer.path as! CGSize
        }
        set(value) {
            maskLayer.path = value
        }
    }
    

    那么在我的代码中我应该怎么做呢?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Prashant Tukadiya    7 年前

    只需将您的类更改为 @ibdesignable 即可在故事板中查看

    < < /P>

    @ibdesignable//将此添加到类中
    class plusbutton:anyuiclass_
    < /代码> 
    
    

    你可以在故事板上看到它

    如何从Storyboard获得角落和半径

    这是一个示例代码

    @ibinspectable
    打开var角边:cgsize=cgsize(宽度:20,高度:20)
    @IBinspectable var左上角:bool=true
    @IBinspectable var topright:bool=真
    @IBinspectable变量左下角:bool=true
    @IBinspectable var bottomright:bool=真
    
    覆盖func awakefromnib()。{
    
    var选项=uirectCorner())
    如果toPulft {
    选项=Options.Union(.TopLeft)
    }
    如果TopLead {
    选项=选项.union(.topright)
    }
    如果左下{
    选项=Options.Union(.BottomLeft)
    }
    如果右下角{
    选项=选项.union(.bottomright)
    }
    
    
    让path=uibezierpath(roundedrect:self.bounds,
    ByRoundingCorners:选项,
    转弯半径:自身。转弯边缘)
    
    让masklayer=cashapelayer()。
    
    masklayer.path=路径.cgpath
    self.layer.mask=屏蔽层
    }
    < /代码> 
    

    你可以在故事板上看到它

    enter image description here

    如何从Storyboard获得角落和半径

    这是一个示例代码

    @IBInspectable
    open var cornerEdges: CGSize = CGSize(width: 20, height: 20)
    @IBInspectable  var topLeft: Bool = true
    @IBInspectable  var topRight: Bool = true
    @IBInspectable  var bottomLeft: Bool = true
    @IBInspectable  var bottomRight: Bool = true
    
    override func awakeFromNib() {
    
        var options = UIRectCorner()
        if topLeft {
           options =  options.union(.topLeft)
        }
        if topRight {
           options =  options.union(.topRight)
        }
        if bottomLeft {
          options =  options.union(.bottomLeft)
        }
        if bottomRight {
          options =  options.union(.bottomRight)
        }
    
    
        let path = UIBezierPath(roundedRect:self.bounds,
                                byRoundingCorners:options,
                                cornerRadii: self.cornerEdges)
    
        let maskLayer = CAShapeLayer()
    
        maskLayer.path = path.cgPath
        self.layer.mask = maskLayer
    }
    
        2
  •  1
  •   Saeed Rahmatolahi    7 年前

    因此,如果要同时更改边角的高度和宽度,可以使用@prashanttukadiya answer,但如果只想为边角设置一个数字,则可以使用此代码。

     @IBInspectable
    open var cornerEdges : CGFloat = 0
    @IBInspectable  var topLeft: Bool = false
    @IBInspectable  var topRight: Bool = false
    @IBInspectable  var bottomLeft: Bool = false
    @IBInspectable  var bottomRight: Bool = false
     override func awakeFromNib() {
        super.awakeFromNib()
    
        var options = UIRectCorner()
        if topLeft {
            options =  options.union(.topLeft)
        }
        if topRight {
            options =  options.union(.topRight)
        }
        if bottomLeft {
            options =  options.union(.bottomLeft)
        }
        if bottomRight {
            options =  options.union(.bottomRight)
        }
    
    
        let path = UIBezierPath(roundedRect:self.bounds,
                                byRoundingCorners:options,
                                cornerRadii: CGSize(width: self.cornerEdges, height: self.cornerEdges))
    
        let maskLayer = CAShapeLayer()
    
        maskLayer.path = path.cgPath
        self.layer.mask = maskLayer
    }
    
    推荐文章