iOS-设置视图圆角样式流畅解决方案

代码

//设置圆角视图样式
-(void)setUpSelfView{
    //阴影 Shadow
    self.layer.shadowColor = [UIColor blackColor].CGColor; //黑
    self.layer.shadowOpacity = 0.33;//阴影的不透明度
    self.layer.shadowOffset = CGSizeMake(0, 1.5);//阴影的偏移
    self.layer.shadowRadius = 4.0;//阴影半径
    self.layer.shouldRasterize = YES; //圆角缓存
    self.layer.rasterizationScale = [UIScreen mainScreen].scale;//提高流畅度
    //圆角
    self.layer.cornerRadius = 10.0f;
}

相关说明:
上下文切换

上下文切换,不管是在GPU渲染过程中,还是一直所熟悉的进程切换,上下文切换在哪里都是一个相当耗时的操作。首先我要保存当前屏幕渲染环境,然后切换到一个新的绘制环境,申请绘制资源,初始化环境,然后开始一个绘制,绘制完毕后销毁这个绘制环境,如需要切换到On-Screen Rendering或者再开始一个新的离屏渲染重复之前的操作。 下图描述了一次mask的渲染操作。

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

这样大部分情况下可以马上挽救你的帧数在55帧每秒以上。shouldRasterize = YES会使视图渲染内容被缓存起来,下次绘制的时候可以直接显示缓存,当然要在视图内容不改变的情况下。

除了上面非要作死的人外,大家还是采取预先生成圆角图片,并缓存起来这个方法才是比较好的手段。预处理圆角图片可以在后台处理,处理完毕后缓存起来,再在主线程显示,这就避免了不必要的离屏渲染了。

另外也有在图片上面覆盖一个镂空圆形图片的方法可以实现圆形头像效果,这个也是极为高效的方法。缺点就是对视图的背景有要求,单色背景效果就最为理想。

总结

实现圆角cornerRadius要比mask高效很多。

Rasterize在大部分情况下极大减少GPU工作。在有空间的情况下,大部分情况下缓存总能帮到你,不是吗?

后台预处理图片也能很简单帮上你很大的忙。

感谢:
http://www.cocoachina.com/ios/20150803/12873.html

你可能感兴趣的:(❶,iOS开发,❺,性能优化,⑪.,iOS修炼之道)