0

I try to give corner to view's corners with different size. Firstly, I give corner to all corners about min radius and then I try to change 2 left corner with bigger size.

enter image description here

func roundCorners(_ corners:UIRectCorner,_ cormerMask:CACornerMask, radius: CGFloat) {
    if #available(iOS 11.0, *){
        self.clipsToBounds = false
        self.layer.cornerRadius = radius
        self.layer.maskedCorners = cormerMask
    }else{
        let rectShape = CAShapeLayer()
        rectShape.bounds = self.frame
        rectShape.position = self.center
        rectShape.path = UIBezierPath(roundedRect: self.bounds,    byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius)).cgPath
        self.layer.mask = rectShape
    }
}

//

viewMoreView.roundCorners(.bottomLeft, [.layerMinXMinYCorner , .layerMinXMaxYCorner], radius: 13)
viewMoreView.layer.borderWidth = 1
viewMoreView.layer.borderColor = UIColor(red:0.81, green:0.83, blue:0.83, alpha:1).cgColor
viewMoreView.clipsToBounds = true

This code change left sides but in the right side all changes (radius) is removed.

With this below link, borderRadius doesnt look properly like this pic!!!

enter image description here

Different cornerRadius for each corner Swift 3 - iOS

Ali Ural
  • 93
  • 1
  • 13

2 Answers2

0

I know this is shortcut about this issue

    let demoView = UIView(frame: CGRect(x: 0, y: 0, width: vieww.bounds.width, height: vieww.bounds.height))
    demoView.backgroundColor = UIColor.lightGray
    demoView.layer.cornerRadius = 3.0

    let maskPath = UIBezierPath(roundedRect: demoView.bounds,
                                byRoundingCorners: [.topLeft, .bottomLeft],
                                cornerRadii: CGSize(width: 64.0, height: 0.0))

    let maskLayer = CAShapeLayer()
    maskLayer.path = maskPath.cgPath
    demoView.layer.mask = maskLayer

    vieww.addSubview(demoView)

    let demoViewInner = UIView(frame: CGRect(x: 2, y: 2, width: demoView.bounds.width-4, height: demoView.bounds.height-4))
    demoViewInner.backgroundColor = UIColor.white
    demoViewInner.layer.cornerRadius = 3.0

    let maskPathInner = UIBezierPath(roundedRect: demoViewInner.bounds,
                                byRoundingCorners: [.topLeft, .bottomLeft],
                                cornerRadii: CGSize(width: 60.0, height: 0.0))

    let maskLayerInner = CAShapeLayer()
    maskLayerInner.path = maskPathInner.cgPath
    demoViewInner.layer.mask = maskLayerInner

    demoView.addSubview(demoViewInner)

however adding and inner view looks like a solution also. After reshaping of layer, adding border may not be right way.

enter image description here

0

may be adding sublayer to the view is a clear solution that you can accept

let borderLayer = CAShapeLayer()
borderLayer.frame = self.view.bounds
borderLayer.path  = maskPath.cgPath
borderLayer.lineWidth   = 3
borderLayer.strokeColor = UIColor.lightGray.cgColor;
borderLayer.fillColor   = UIColor.clear.cgColor;

viewMoreView.layer.addSublayer(borderLayer)

Because adding layer border to the current view does not work as such as you would like. You should use sub layers.