解决layer层圆角在滚动视图中引发的性能问题

首选,为什么要解决这个问题?

1 人眼的视觉残留特性:是光对视网膜所产生的视觉在光停止作用后,仍然保持的一种想象;视神经元的反应速度大概是二十四之一秒。

2 帧率 = 帧数 / 时间。就是一秒钟会有多少张图片交替变化。那么问题就来了,如果帧率的值大于视神经元的反应时间值。那么就会造成肉眼上不连贯的感觉(也就是卡顿的现象)

其次,在滚动视图中使用layer圆角,运行时候,如果图片过多,就会出现帧率下降,不流畅的感觉。如何解决呢?注:减小ImageView的size,可以提高帧率,但没有什么卵用。

1 实现圆角的方法有以下几种:

   1-1:aImageView.layer.cornerRadius = aImageView.frame.size.width/2.0;     aImageView.layer.masksToBounds = YES; (帧率大概是45)

   1-2: CAShapeLayer *layer = [CAShapeLayer layer];  UIBezierPath *aPath = [UIBezierPath bezierPathWithOvalInRect:aImageView.bounds];              layer.path = aPath.CGPath;    aImageView.layer.mask = layer;(帧率比cornerRadius还要小) 

           maskView的方法和这个差不多。帧率一样比cornerRadius还要小。

          原因:一次的mask需要两次的离屏渲染和一次的主屏渲染,这样的话,大量的imageView需要处理,肯定是耗时操作,自然而然的帧率也会下降。

最后,如何解决这个问题呢?
  1 如果你想用cornerRadius或者mask的话,添加代码。

     self.layer.shouldRasterize = YES; (这样是使视图渲染的内容被缓存起来,下次绘制的时候可以直接显示缓存,前提是视图显示的内容不改变)

     self.layer.rasterizationScale = [UIScreen mainScreen].scale;    

    这样的效果就是将帧数提高到55以上。

  2 也可以后台直接返回的已经设置好圆角的图片,这个需要和后台进行交互。
  3 如果图片的背景颜色允许的情况下,可以在图片上覆盖镂空的圆形图片,这个是比较高效的方法。

  4 贝塞尔曲线画圆角。http://www.cnblogs.com/moyunmo/p/3600091.html?utm_source=tuicool&utm_medium=referral

转载于:https://www.cnblogs.com/beicheng-zhang/p/6421688.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值