如何设置cornerRadius仅UIView的左下angular,右下angular和左上angular?

有没有一种方法来设置cornerRadius仅UIView的左下angular,右下angular和左上angular?

我尝试了以下,但最终导致视图消失。 下面的代码有什么问题吗?

UIBezierPath *maskPath; maskPath = [UIBezierPath bezierPathWithRoundedRect:view.bounds byRoundingCorners:(UIRectCornerBottomLeft | UIRectCornerBottomRight) cornerRadii:CGSizeMake(20.0, 20.0)]; CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; maskLayer.path = maskPath.CGPath; view.layer.mask = maskLayer; 

你可以这样做:

 UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.viewOutlet.bounds byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerBottomLeft | UIRectCornerBottomRight) cornerRadii:CGSizeMake(10.0, 10.0)]; CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; maskLayer.frame = self.view.bounds; maskLayer.path = maskPath.CGPath; self.viewOutlet.layer.mask = maskLayer; 

在这里输入图像说明

更新:
如果您需要边界,只需创build另一个CAShapeLayer并将其添加到视图的图层作为子图层。 像这样(把这段代码放在上面的代码下面):

 CAShapeLayer *borderLayer = [[CAShapeLayer alloc] init]; borderLayer.frame = self.view.bounds; borderLayer.path = maskPath.CGPath; borderLayer.lineWidth = 4.0f; borderLayer.strokeColor = [UIColor blackColor].CGColor; borderLayer.fillColor = [UIColor clearColor].CGColor; [self.viewOutlet.layer addSublayer:borderLayer]; 

在这里输入图像说明

在swift 3.0中是这样的:

 let maskPath = UIBezierPath.init(roundedRect: self.viewOutlet.bounds, byRoundingCorners:[.topLeft, .bottomLeft], cornerRadii: CGSize.init(width: 10.0, height: 10.0)) let maskLayer = CAShapeLayer() maskLayer.frame = self.viewOutlet.bounds maskLayer.path = maskPath.cgPath self.viewOutlet.layer.mask = maskLayer 

testing在xcode 8和swift 3

 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 } } 

像这样使用

 YourView.roundCorners([.topLeft, .bottomLeft], radius: 10) 

使用自定义UIView并实现下面的代码

 #import "CustomUIView.h" @implementation CustomView - (void)drawRect:(CGRect)rect { // Drawing code CAShapeLayer * maskLayer = [CAShapeLayer layer]; maskLayer.path = [UIBezierPath bezierPathWithRoundedRect: self.bounds byRoundingCorners: UIRectCornerTopLeft | UIRectCornerBottomLeft | UIRectCornerBottomRight cornerRadii: (CGSize){20.0, 20.0}].CGPath; self.layer.mask = maskLayer; } @end 

输出:

在这里输入图像说明

看看UIBezierPath.h选项:

 typedef NS_OPTIONS(NSUInteger, UIRectCorner) { UIRectCornerTopLeft = 1 << 0, UIRectCornerTopRight = 1 << 1, UIRectCornerBottomLeft = 1 << 2, UIRectCornerBottomRight = 1 << 3, UIRectCornerAllCorners = ~0UL }; 

Swift设置视图的angular点半径

图层的创build和遮罩应该在从UIViewinheritance的可选drawRect()块内运行

  override func drawRect(rect: CGRect) { super.drawRect(rect) let maskPath = UIBezierPath(roundedRect: self.view.bounds, byRoundingCorners: [.TopLeft, .BottomLeft, .BottomRight], cornerRadii: CGSizeMake(10, 10)) let maskLayer = CAShapeLayer() maskLayer.frame = self.view.bounds maskLayer.path = maskPath.CGPath self.view.layer.mask = maskLayer } 

希望对你有帮助

你的上面的代码在我的机器上完美运行,可能是你设置CAShapeLayer框架等于你的视图框架,因为你的视图将消失,但我没有看到你的代码中的这一行,所以请检查您的视图属性,并应用下面的代码

  UIBezierPath *maskPath; maskPath = [UIBezierPath bezierPathWithRoundedRect:viewName.bounds byRoundingCorners:(UIRectCornerBottomLeft | UIRectCornerBottomRight |UIRectCornerTopLeft) cornerRadii:CGSizeMake(20.0, 20.0)]; CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; maskLayer.frame =viewName.bounds; maskLayer.path = maskPath.CGPath; viewName.layer.mask = maskLayer; 

我知道这是很晚,但我只是创build一个方法,你可以只传递一个或多个UIRectCorners。

  [self setMaskTo:myView byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight)]; - (void)setMaskTo:(UIView*)view byRoundingCorners:(UIRectCorner)corners { UIBezierPath *rounded = [UIBezierPath bezierPathWithRoundedRect:view.bounds byRoundingCorners:corners cornerRadii:CGSizeMake(8.0, 8.0)]; CAShapeLayer *shape = [[CAShapeLayer alloc] init]; [shape setPath:rounded.CGPath]; view.layer.mask = shape; } 

您错过了添加UIRectCornerTopLeft。 请试试这个代码:

 UIRectCorner rectCorner = UIRectCornerTopLeft | UIRectCornerBottomLeft | UIRectCornerBottomRight; UIBezierPath *maskPath; maskPath = [UIBezierPath bezierPathWithRoundedRect:view.bounds byRoundingCorners:rectCorner cornerRadii:CGSizeMake(20.0, 20.0)]; CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; maskLayer.path = maskPath.CGPath; view.layer.mask = maskLayer; view.layer.masksToBounds = YES; 

可能有帮助….

 UIBezierPath *maskPath; maskPath = [UIBezierPath bezierPathWithRoundedRect:someView.bounds byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight|UIRectCornerBottomLeft|UIRectCornerBottomRight) cornerRadii:CGSizeMake(10.0,10.0,5.0, 10.0)]; CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; maskLayer.frame = self.bounds; maskLayer.path = maskPath.CGPath; someView.layer.mask = maskLayer; 

试试这个代码

 -(void)setMaskTo:(UIView*)view byRoundingCorners:(UIRectCorner)corners { UIBezierPath* rounded = [UIBezierPath bezierPathWithRoundedRect:view.bounds byRoundingCorners:corners cornerRadii:CGSizeMake(10.0, 10.0)]; CAShapeLayer* shape = [[CAShapeLayer alloc] init]; [shape setPath:rounded.CGPath]; view.layer.mask = shape; } 

呼叫使用

 [self setMaskTo:myView byRoundingCorners:UIRectCornerTopLeft|UIRectCornerTopRight]; 

可用选项:

 UIRectCornerTopLeft, UIRectCornerTopRight,UIRectCornerBottomLeft,UIRectCornerBottomRight,UIRectCornerAllCorners 

使用这个代码的angular度半径只有两面。经过很长时间我得到了build议ios。 这里viewFilter是我们想要四舍五入的视图出口。

 -(void) viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; [self setMaskTo:viewFilter byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight]; } -(void)setMaskTo:(UIView*)view byRoundingCorners:(UIRectCorner)corners{ UIBezierPath *rounded = [UIBezierPathbezierPathWithRoundedRect:view.bounds byRoundingCorners:corners cornerRadii:CGSizeMake(20.0, 20.0)]; CAShapeLayer *shape = [[CAShapeLayer alloc] init]; shape.frame = self.view.bounds; [shape setPath:rounded.CGPath]; view.layer.mask = shape; }