有没有办法为一个UIView的左上角和右上角设置角半径?

我尝试了下面的方法,但最终它再也看不到视图了。

UIView *view = [[UIView alloc] initWithFrame:frame];

CALayer *layer = [CALayer layer];
UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRoundedRect:frame byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight) cornerRadii:CGSizeMake(3.0, 3.0)];
layer.shadowPath = shadowPath.CGPath;
view.layer.mask = layer;

当前回答

一种编程的方法是创建一个UIView在UIView顶部有圆角的部分。或者你可以把顶部藏在什么东西下面。

其他回答

Emma: . topright和。bottom right对你不起作用,可能是因为视图调用。roundCorners是在最终视图边界计算之前完成的。注意,贝塞尔路径在被调用时起源于视图边界。例如,如果自动布局将缩小视图,右侧的圆角可能在视图之外。 尝试在viewDidLayoutSubviews中调用它,其中视图的边界是final。

最简单的方法是用圆角层做一个蒙版。

CALayer *maskLayer = [CALayer layer];
maskLayer.frame = CGRectMake(0,0,maskWidth ,maskHeight);
maskLayer.contents = (__bridge id)[[UIImage imageNamed:@"maskImageWithRoundedCorners.png"] CGImage];

aUIView.layer.mask = maskLayer;

别忘了:

#import <QuartzCore/QuartzCore.h>

如果你正在寻找一个界面构建器的唯一解决方案,有一个适用于iOS 11或更高版本。在这里可以看到我的答案:https://stackoverflow.com/a/58626264

Swift代码示例:https://stackoverflow.com/a/35621736/308315


不直接。你必须:

创建一个CAShapeLayer 根据视图将其路径设置为CGPathRef。边界,但只有两个圆角(可能通过使用+[UIBezierPath bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:]) 设置你的view.layer.mask为CAShapeLayer

一种编程的方法是创建一个UIView在UIView顶部有圆角的部分。或者你可以把顶部藏在什么东西下面。