我引用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;
}
}
我的布局如下:
按钮布局属性:
视图布局属性:
正确的部分总是如下角直角。
如何解决有关设置尾随空格和角半径的元素的问题?
答案 0 :(得分:4)
您应该更新视图的frame
方法内的mask
layoutSubviews
图层或视图控制器的viewDidLayoutSubviews
方法内部。
因为当您设置遮罩层frame
时,视图具有不同的框架。在autolayout
更新框架和布局子视图后,视图具有正确的frame
值。可能autolayout
在UIView
级别运行,而不是CALayer
级别。因此,您应该在布局阶段后更新遮罩层的框架。
答案 1 :(得分:0)
为什么不使用
- (void)viewDidLoad {
[super viewDidLoad];
self.btn.layer.cornerRadius = 5;
self.myView.layer.cornerRadius = 5;
}
您还可以通过用户定义的运行时属性在IB上设置这些