首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不带遮罩层的UIView圆角

不带遮罩层的UIView圆角
EN

Stack Overflow用户
提问于 2012-11-06 04:59:18
回答 2查看 1.4K关注 0票数 0

我正在构建一个iPad应用程序,其中包括几个条形图(每个图形的30+条形图)和屏幕底部的下拉菜单。设计要求这些栏在左上角和右上角有圆角,但在左下角和右下角有方角。

现在,我正在使用一个遮罩层将每个单独图形条的顶角变圆:

代码语言:javascript
复制
#import "UIView+RoundedCorners.h"
#import <QuartzCore/QuartzCore.h>

@implementation UIView (RoundedCorners)

-(void)setRoundedCorners:(UIRectCorner)corners radius:(CGFloat)radius {
    CGRect rect = self.bounds;

    // Create the path 
    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:rect 
                                                   byRoundingCorners:corners
                                                         cornerRadii:CGSizeMake(radius, radius)];

    // Create the shape layer and set its path
    CAShapeLayer *maskLayer = [CAShapeLayer layer];
    maskLayer.frame = rect;
    maskLayer.path = maskPath.CGPath;

    // Set the newly created shape layer as the mask for the view's layer
    self.layer.mask = maskLayer;
    self.layer.shouldRasterize = YES;
}

@end

这是可行的,但当我拉起下拉菜单时,会出现严重的帧丢失/延迟(请注意,菜单重叠,出现在图形顶部)。当我去掉圆角时,菜单就会弹出漂亮的画面。据我所知,我需要一种通过直接修改视图来圆角的方法,而不是使用遮罩层。有没有人知道我怎么才能做到这一点,或者有其他可能的解决方案?非常感谢您的帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-06 05:03:54

据我所知,我需要一种通过直接修改视图来圆角的方法,而不是使用遮罩层。有没有人知道我怎么才能做到这一点,或者有其他可能的解决方案?

通常的方法是获取视图的层并设置cornerRadius属性:

代码语言:javascript
复制
myView.layer.cornerRadius = 10.0;

这样就不需要遮罩层或bezier路径了。在您的方法的上下文中,它将是:

代码语言:javascript
复制
-(void)setRoundedCorners:(UIRectCorner)corners radius:(CGFloat)radius
{
    self.layer.cornerRadius = radius;
}

更新:抱歉--我错过了这一部分:

设计要求这些条在左上角和右上角有圆角,但在左下角和右下角有方角

如果你只想要圆角,你不能通过设置图层的cornerRadius属性来实现。您可以采用两种方法:

  • 创建一个具有两个圆角和两个正方形的贝塞尔曲线路径,然后填充它。不需要遮罩层来做到这一点。
  • 使用可调整大小的图像。请参阅UIImage的-resizableImageWithCapInsets:-resizableImageWithCapInsets:resizingMode:方法。甚至还有一些方法可以为可缩放的图像添加动画,这样你就可以很容易地让你的条形图增长到合适的长度。
票数 4
EN

Stack Overflow用户

发布于 2012-11-06 05:38:46

尝试在您的图层上设置shouldRasterize。应该会有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13240280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档