如何在设置UIView的cornerRadius时阻止剪切子视图?

时间:2015-06-25 15:40:53

标签: ios objective-c uiview cornerradius cliptobounds

我正在尝试设置UIButton的子类视图的cornerRadius,圆角以正确的方式显示,但是当我尝试在其上添加一个subView(花图标)时,子视图似乎被剪裁为下面右侧侧的图片,这不是我的预期。我尝试制作正确的外观,如左侧图片所示,图标不被剪裁。我使用的代码:

button.layer.cornerRadius = button.frame.width / 2;
button.layer.masksToBounds = Yes;    

Avatar View(left) Avatar View(right)

希望有人能帮助我了解如何防止剪辑 谢谢!

2 个答案:

答案 0 :(得分:1)

您不应该将叠加层添加为子视图。如果您将clipsToBounds设置为YES,则会剪切子视图。

而是将其添加为兄弟姐妹,如下所示:

- container view
  - image view (clips)
  - overlay view

答案 1 :(得分:0)

如果你使用上面提到的代码使按钮变圆,那么你的按钮肯定会从角落切掉,所以如果你只想从3个角落切掉它,那么就这样做:

#import <QuartzCore/CoreAnimation.h>

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