ios将cornerRadius设置为尾随空格,角半径不起作用

时间:2015-03-17 14:28:29

标签: ios objective-c

我引用post来构建UIView和UIButton角半径。

但是我发现当我设置尾随空格时,右边的角落总是不会变成弧形。

我的代码如下:

 - (void)viewDidLoad {
     [super viewDidLoad];

     self.btn = (UIButton*)[self roundCornerOnView:self.btn onTopLeft:YES topRight:YES bottomLeft:YES bottomRight:YES radius:5.0];
     self.myView = (UIView*)[self roundCornerOnView:self.myView onTopLeft:YES topRight:YES bottomLeft:YES bottomRight:YES radius:5.0];

 }

 -(UIView*) roundCornerOnView:(UIView*)view onTopLeft:(BOOL)tl topRight:(BOOL)tr bottomLeft:(BOOL)bl bottomRight:(BOOL)br radius:(float)radius
 {
     if( tl || tr || bl || br )
     {
         UIRectCorner corner = 0;
         if (tr)
         {
             corner = corner | UIRectCornerTopRight;
         }
         if (br)
         {
             corner = corner | UIRectCornerBottomRight;
         }


         if( tl )
         {
             corner = corner | UIRectCornerTopLeft;
         }
         if (bl)
         {
             corner = corner | UIRectCornerBottomLeft;
         }

         UIView *roundedView = view;
         UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:roundedView.bounds byRoundingCorners:corner cornerRadii:CGSizeMake(radius, radius)];
         CAShapeLayer *maskLayer = [CAShapeLayer layer];
         maskLayer.frame = roundedView.bounds;
         maskLayer.path = maskPath.CGPath;
         roundedView.layer.mask = maskLayer;
         return roundedView;
     }
     else
     {
         return view;
     }

 }

我的布局如下:

按钮布局属性: enter image description here

视图布局属性: enter image description here

正确的部分总是如下角直角。
enter image description here

如何解决有关设置尾随空格和角半径的元素的问题?

2 个答案:

答案 0 :(得分:4)

您应该更新视图的frame方法内的mask layoutSubviews图层或视图控制器的viewDidLayoutSubviews方法内部。

因为当您设置遮罩层frame时,视图具有不同的框架。在autolayout更新框架和布局子视图后,视图具有正确的frame值。可能autolayoutUIView级别运行,而不是CALayer级别。因此,您应该在布局阶段后更新遮罩层的框架。

答案 1 :(得分:0)

为什么不使用

- (void)viewDidLoad {
    [super viewDidLoad];
    self.btn.layer.cornerRadius = 5;
    self.myView.layer.cornerRadius = 5;
}

您还可以通过用户定义的运行时属性在IB上设置这些