使 UIView 的特定角为圆形

Posted

技术标签:

【中文标题】使 UIView 的特定角为圆形【英文标题】:Make specific corners of UIView round 【发布时间】:2012-12-28 10:10:09 【问题描述】:

我做了一些研究,我明白了,没有简单的方法可以 把 UIView 的右上角和左上角变成圆形,对吧?

ps。此代码使所有 4 个角都变圆,这是 smth。我不要。

  #import <QuartzCore/QuartzCore.h>

 self.layer.cornerRadius = 5;
 self.layer.masksToBounds = YES;

【问题讨论】:

***.com/questions/4847163/… how to set cornerRadius for only top-left and top-right corner of a UIView?的可能重复 【参考方案1】:

你可以用这个 sn-p 做到这一点:

// Set top right & left corners
[self setMaskTo:yourView 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;

PS:正如我在评论中所说,如果你在显示UITableViewCell 单元格时使用这样的东西,我发现使用背景图像总是更好的选择,因为这种绘图东西总是会影响性能。

【讨论】:

仅供参考,如果您在显示UITableViewCell 单元格时使用这样的东西,我发现使用背景图像总是更好的选择,因为这种绘图东西总是会影响性能。 这个评论可能应该在答案中说,屏蔽视图对性能有很大影响,如果你能提供帮助,应该始终使用背景图像 感谢评论它有效!附言。无论如何,我没有将它用作 UITableViewcell,即使我真的不知道如何使用背景图像来做到这一点...... :(((但无论如何谢谢。 @amb +1 不错的答案徽章在路上:) 我已经尝试过了,但它只适用于左上角和左下角,不适用于其他右下角和右上角。请提出建议。【参考方案2】:

我尝试过一次 UIView 的扩展,但它对我不起作用,因为它在绘制单元格时引起了问题

我现在通过两个步骤得到了一个更好、更简单的解决方案,效果非常好:)

1) 一行代码 (Swift 2.0) - 它环绕视图的所有 4 个角:

YourView.layer.cornerRadius = 10

2) 并在情节提要中添加一个添加 1 个带有常规角的视图,您不需要圆角并根据需要调整约束: 请注意,小常规角视图应位于主视图后面。 This is how it looks in storyboard

Here you can see constraints needed for the small view

【讨论】:

以上是关于使 UIView 的特定角为圆形的主要内容,如果未能解决你的问题,请参考以下文章

没有混合层的圆形 UIView(带cornerRadius)

如何在 Swift 中制作圆形 UIView

使 UIView 透明

如何使用 Swift 在 UIView 中将圆形进度条居中?

UILabel 在圆形自定义 UIView 中不可见

可调整大小的居中圆形 UIView