我正在构建一个iPad应用程序,其中包括几个条形图(每个图形的30+条形图)和屏幕底部的下拉菜单。设计要求这些栏在左上角和右上角有圆角,但在左下角和右下角有方角。
现在,我正在使用一个遮罩层将每个单独图形条的顶角变圆:
#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这是可行的,但当我拉起下拉菜单时,会出现严重的帧丢失/延迟(请注意,菜单重叠,出现在图形顶部)。当我去掉圆角时,菜单就会弹出漂亮的画面。据我所知,我需要一种通过直接修改视图来圆角的方法,而不是使用遮罩层。有没有人知道我怎么才能做到这一点,或者有其他可能的解决方案?非常感谢您的帮助
发布于 2012-11-06 05:03:54
据我所知,我需要一种通过直接修改视图来圆角的方法,而不是使用遮罩层。有没有人知道我怎么才能做到这一点,或者有其他可能的解决方案?
通常的方法是获取视图的层并设置cornerRadius属性:
myView.layer.cornerRadius = 10.0;这样就不需要遮罩层或bezier路径了。在您的方法的上下文中,它将是:
-(void)setRoundedCorners:(UIRectCorner)corners radius:(CGFloat)radius
{
self.layer.cornerRadius = radius;
}更新:抱歉--我错过了这一部分:
设计要求这些条在左上角和右上角有圆角,但在左下角和右下角有方角
如果你只想要圆角,你不能通过设置图层的cornerRadius属性来实现。您可以采用两种方法:
-resizableImageWithCapInsets:和-resizableImageWithCapInsets:resizingMode:方法。甚至还有一些方法可以为可缩放的图像添加动画,这样你就可以很容易地让你的条形图增长到合适的长度。发布于 2012-11-06 05:38:46
尝试在您的图层上设置shouldRasterize。应该会有帮助。
https://stackoverflow.com/questions/13240280
复制相似问题