首选,为什么要解决这个问题?
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
原文:http://www.cnblogs.com/beicheng-zhang/p/6421688.html