作家
登录

iOS和常见的离屏渲染Say Goodbye!

作者: 来源: 2017-12-21 09:04:31 阅读 我要评论

【限时免费】岁尾最强一次云计算大年夜会,看传统、社区、互联网企业若何碰撞?


移动应用优化到最后重要照样看FPS(页面流畅程度)机能、内存占用等方面。离屏衬着也是老生常谈的一个问题,本文侧重点在常见导致离屏衬着的身分及解决筹划。


那么为什么离屏衬着会引起机能问题?

OpenGL中,GPU屏幕衬着有两种方法:>iOS和常见的离屏衬着Say Goodbye!

离屏衬着激发身分有 cornerRadius(设置圆角)、shadows(暗影)、masks(遮罩)、edge antialiasing(抗锯齿)、group opacity(不通明)、shouldRasterize(光栅化) 等,至于检测离屏衬着的对象 Instruments的Core Animation 就不多说了。本文重要介绍 设置圆角 和 暗影 的筹划。

设置圆角

  1. //只须要设置layer层的两个属性 
  2.    //设置圆角 
  3.    imageView.layer.cornerRadius = imageView.frame.size.width / 2; 
  4.    //将多余的部分切掉落 
  5.    imageView.layer.masksToBounds = YES; 

优化筹划:

【编辑推荐】

  1. 让人头痛的iOS11 有了这些技能可让体系更流畅
  2. 2017 Android和iOS几回再三被曝Bug,它们都怎么了?
  3. 谷歌苹不雅竟齐翻车!谈谈安卓8/iOS11那些Bug
  4. iOS消息转发机制Demo解析
  5. iOS模仿断点机制上传文件实现办法
【义务编辑:未丽燕 TEL:(010)68476606】

这里供给两种避免离屏衬着的筹划

1.视图上添加一个子layer到最上层,用于隐瞒该视图及其子视图,设置layer的图片为刚好可以或许隐瞒成所需圆角样子,并且图片色彩刚好是该视图父视图的背景色彩就达到想要的效不雅。

github地址

  1. /** 
  2.  设置一个四角圆角 
  3.  
  4.  @param radius 圆角半径 
  5.  @param color  圆角配风景 
  6.  */ 
  7. - (void)xw_roundedCornerWithRadius:(CGFloat)radius cornerColor:(UIColor *)color; 
  8.  
  9. /** 
  10.  设置一个通俗圆角 
  11.  
  12.  @param radius  圆角半径 
  13.  @param color   圆角配风景 
  14.  @param corners 圆角地位 
  15.  */ 
  16. - (void)xw_roundedCornerWithRadius:(CGFloat)radius cornerColor:(UIColor *)color corners:(UIRectCorner)corners; 
  17.  
  18. /** 
  19.  设置一个带边框的圆角 
  20.  
  21.  @param cornerRadii 圆角半径cornerRadii 
  22.  @param color       圆角配风景 
  23.  @param corners     圆角地位 
  24.  @param borderColor 边框色彩 
  25.  @param borderWidth 边框线宽 
  26.  */ 
  27. - (void)xw_roundedCornerWithCornerRadii:(CGSize)cornerRadii cornerColor:(UIColor *)color corners:(UIRectCorner)corners borderColor:(UIColor *)borderColor borderWidth:(CGFloat)borderWidth; 

下载下来这个分类直接拖入工程就可以应用了,调用很便利,不过应用的时刻会发明,这三个API都须要传一个参数 cornerColor (父视图的配风景),所以也造成了这个功能的局限,即 如不雅该父视图的色彩不是纯色,此时该方法就不实用了,同样 如不雅父视图的色彩会变更,那实现起来的代码也不那媚暌高古,如下图,有点难堪,这里引出了第二种筹划。

iOS和常见的离屏衬着Say Goodbye!
界线色彩与配风景不符

2.经由过程修改layer.mask,起首经由过程贝塞尔曲线创建基于矢量的路径,传递给CAShapeLayer进行衬着。路径闭环,再把绘制出的Shape赋值给layer.mask,在Mask范围之外的Layer将不被显示大年夜而达到圆角效不雅。代码实现很简单,如下:


  推荐阅读

  谷歌强推安卓8.0系统:明年所有APP都必须支持

【限时免费】岁尾最强一次云计算大年夜会,看传统、社区、互联网企业若何碰撞?我们逐条来分析,起首第一点,今朝Play市廛仍许可面向老安卓体系的APP提交,来岁8月开端就弗成能了;第二自得味着,谷歌为>>>详细阅读


本文标题:iOS和常见的离屏渲染Say Goodbye!

地址:http://www.17bianji.com/lsqh/40007.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)