【问题标题】:set corner radius for one side of a button according to the view?根据视图设置按钮一侧的角半径?
【发布时间】:2019-05-14 11:07:44
【问题描述】:

我必须根据在后台找到的 UIView 来设置圆角半径。我附上了我的开发图像供您参考。

【问题讨论】:

标签: ios swift uibutton uikit


【解决方案1】:

只需创建如下所示的自定义视图,并将蒙版和路径应用于主层

@IBDesignable class VariableSeparateCornerView: UIView {

    private var corners: UIRectCorner = [.allCorners]
    private var radius: CGFloat = 0

    override func layoutSubviews() {
        super.layoutSubviews()
        self.refreshCorners()
    }

    func roundCorners(corners: UIRectCorner, radius: CGFloat) {
        self.corners = corners
        self.radius = radius
        self.refreshCorners()
    }

    private func refreshCorners() {
        let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
        let mask = CAShapeLayer()
        mask.path = path.cgPath
        self.layer.mask = mask
    }
}

用途:

let containerView = VariableSeparateCornerView() 
containerView.roundCorners(corners: [.topRight, .bottomLeft, .bottomRight], radius: 20)

【讨论】:

    【解决方案2】:

    这是扩展版本。这可能更容易。

    extension UIView {
       func roundCorners(_ corners:UIRectCorner, radius: CGFloat) {
          let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
          let mask = CAShapeLayer()
          mask.path = path.cgPath
    
          self.layer.mask = mask
       }
    }
    

    用途:

    button?.roundCorners([.topRight, .bottomLeft, .bottomRight], radius: radius)
    

    【讨论】:

      【解决方案3】:

      你可以这样试试。

        if #available(iOS 11.0, *) {
              customView.layer.cornerRadius = 10
              customView.layer.maskedCorners = [.layerMinXMaxYCorner,.layerMinXMinYCorner,.layerMaxXMinYCorner]
          } else {
             // Fallback on earlier versions
      
              let rectShape = CAShapeLayer()
              rectShape.bounds = customView.frame
              rectShape.position = customView.center
              rectShape.path = UIBezierPath(roundedRect: customView.bounds,    byRoundingCorners: [.bottomRight , .topLeft , .topRight], cornerRadii: CGSize(width: 10, height: 10)).cgPath
              customView.layer.mask = rectShape
        }
      

      【讨论】:

      • 请告诉我更改按钮
      • 更改按钮的圆角半径
      • 您可以更改代码,例如设置按钮角半径 button.layer.maskedCorners = [.layerMaxXMaxYCorner]
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多