установить радиус угла для одной стороны кнопки в соответствии с видом? - PullRequest
0 голосов
/ 13 декабря 2018

Я должен установить угловой радиус в соответствии с UIView, найденным на заднем плане.Я приложил изображение моей разработки для вашей справки.

this is what I got after developement

Ответы [ 3 ]

0 голосов
/ 13 декабря 2018

Это версия расширения.Это может быть проще.

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)
0 голосов
/ 13 декабря 2018

Вы можете попробовать вот так.

  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
  }
0 голосов
/ 13 декабря 2018

Просто создайте пользовательский вид, как показано ниже, и примените маску и путь к основному слою

@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)
...