美文网首页iOS
关于corner 性能问题

关于corner 性能问题

作者: ClarkWang_001 | 来源:发表于2015-10-15 13:19 被阅读2146次

在ios 中绘制圆角常用方式:

   myView.layer.cornerRadius = 8;
   myView.layer.masksToBounds = YES;

即可实现圆角; 如果需要只设置上边角或者下边角1个或者几个圆角,也可通过下面的方式来处理:

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(120, 10, 80, 80)];
view.backgroundColor = [UIColor redColor];
[self.view addSubview:view];

 UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:view.bounds byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight cornerRadii:CGSizeMake(10, 10)];
 CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
 maskLayer.frame = view.bounds;
 maskLayer.path = maskPath.CGPath;
 view.layer.mask = maskLayer;

其中,
byRoundingCorners:UIRectCornerBottomLeft|UIRectCornerBottomRight
指定了需要成为圆角的角。该参数是UIRectCorner类型的,可选的值有:

UIRectCornerTopLeft
UIRectCornerTopRight
UIRectCornerBottomLeft
UIRectCornerBottomRight
UIRectCornerAllCorners
从名字很容易看出来代表的意思,使用“|”来组合就好了。

在普通的视图中通过以上方式设置1个或者较少数量的视图圆角基本没有问题,但是在UIScrollview,或者UITableView中有大量视图使用带圆角的效果时容易碰到性能问题,出现卡顿;

现在优化方案如下: 根据是否要包含图片圆角分2种处理方式;

1) 关于图片圆角的处理方式,方法就是先把图片处理成圆角,处理后在渲染;

   UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0);
   UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:UIRectCornerTopLeft|UIRectCornerTopRight cornerRadii:CGSizeMake(self.cornerRadius, self.cornerRadius)];
   [path addClip];
   [_image drawInRect:rect];
   UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
  1. 普通视图,不包含图片,可通过如下方式处理: 把背景图设置成clearColor, layer 的背景color和要渲染的视图颜色一致,设置好角度,通过颜色差异来显示出圆角的效果; 关键是把masksToBounds设置NO,就是这个家伙消耗性能;
    self.view.backgroundColor = [UIColor clearColor];
// Set view.layer.backgroundColor not view.backgroundColor otherwise the background is not masked to the rounded border.
    self.view.layer.backgroundColor = [UIColor whiteColor].CGColor;
    self.view.layer.cornerRadius = 8;
// Huge change in performance by explicitly setting the below (even though default is supposedly NO)
    self.view.layer.masksToBounds = NO;     
// Performance improvement here depends on the size of your view
    self.view.layer.shouldRasterize = YES; 
    [self.view.layer setRasterizationScale:[UIScreen mainScreen].scale];

http://stackoverflow.com/questions/4735623/uilabel-layer-cornerradius-negatively-impacting-performance

相关文章

  • 关于corner 性能问题

    在ios 中绘制圆角常用方式: 即可实现圆角; 如果需要只设置上边角或者下边角1个或者几个圆角,也可通过下面的方式...

  • LeetCode每日一题:unique paths

    问题描述 A robot is located at the top-left corner of a m x n...

  • 关于前端性能优化问题详解

    关于前端性能优化问题详解 出处:http://segmentfault.com/blogs 前端性能优化指南 AJ...

  • 关于corner这个词

    从前只知道corner就是街角,角落的意思,还有就是常常说around the corner,表示即将发生,比如 ...

  • Corner

    2essays. 友情变淡,时过境迁,就像曾经最容易打开的对话框,现在却成了最难问候的一个。 我们总是...

  • CORNER

    1essays. 两点多醒来,又到四点了,天亮后,又是令我恐惧的一天。空闲的副作用就是让我多出很多胡思乱想的...

  • Corner

    3essays. 一个失眠症患者,不管他干什么,失眠是事情的实质。 2015年对我而言是艰难的一年,...

  • Corner

    他从长睡中醒来, 光亮从空中砸落到脸上 有些许酥麻。昨晚 胡乱扔到地上的衣服己 叠好后整齐地放在床边。 他想难道昨...

  • corner的分类

    Corner可以分为对晶体管的偏差建模的PVT corner,以及对互联线偏差建模的RC Corner。 PVT ...

  • RC corner

    scenario 定义中包括 Mode、Corner、RC 其中 Corner (PVT)用于计算 cell de...

网友评论

  • YannChee:背景图设置成clearColor 也会损耗性能的,但至于跟masksToBounds谁更耗性能还需要进一步测试

本文标题:关于corner 性能问题

本文链接:https://www.haomeiwen.com/subject/yvwocttx.html