当前位置: 首页 > news >正文

宜昌教育云网站建设seo博客教程

宜昌教育云网站建设,seo博客教程,网络销售怎么做自己的网站,静态企业网站下载文章目录 离屏渲染UIView和CALayer关系GPU屏幕渲染有两种方式:产生离屏渲染的原因:既然离屏渲染这么耗性能,为什么有这套机制呢?什么情况会离屏渲染?既然离屏渲染这么不好,为什么我们还要强制开启呢?如何避免离屏渲染&#xff1f…

文章目录

  • 离屏渲染
    • UIView和CALayer关系
    • GPU屏幕渲染有两种方式:
    • 产生离屏渲染的原因:
    • 既然离屏渲染这么耗性能,为什么有这套机制呢?
    • 什么情况会离屏渲染?
    • 既然离屏渲染这么不好,为什么我们还要强制开启呢?
    • 如何避免离屏渲染?
      • 1.圆角的优化:
      • 2.shadow

离屏渲染

UIView和CALayer关系

  • UIView继承自UIResponder,可以处理系统传递过来的事件,如:UIApplication、UIViewController、UIView,以及所有从UIView派生出来的UIKit类。每个UIView内部都有一个CALayer提供内容的绘制和显示,并且作为内部RootLayer的代理视图。
  • CALayer继承自NSObject类,负责显示UIView提供的内容contents。CALayer有三个视觉元素:背景色、内容和边框,其中,内容的本质是一个CGImage。

GPU屏幕渲染有两种方式:

1.On-Screen Rendering (当前屏幕渲染)
指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区进行。

2.Off-Screen Rendering (离屏渲染)
指的是在GPU在当前屏幕缓冲区以外开辟一个缓冲区进行渲染操作。

当前屏幕渲染不需要额外创建新的缓存,也不需要开启新的上下文,相对于离屏渲染性能更好。但是受当前屏幕渲染的局限因素限制(只有自身上下文、屏幕缓存有限等),当前屏幕渲染有些情况下的渲染解决不了的,就使用到离屏渲染。

产生离屏渲染的原因:

苹果系统不能够一次的去处理视图,需要一张一张的去处理视图,那么就会需要开辟一个离屏缓存区去存储一张张处理好的视图,开辟的这个离屏缓存区就会导致离屏渲染。

既然离屏渲染这么耗性能,为什么有这套机制呢?

有些效果被认为不能直接呈现于屏幕,而需要在别的地方做额外的处理预合成。图层属性的混合体没有预合成之前不能直接在屏幕中绘制,所以就需要屏幕外渲染。

什么情况会离屏渲染?

  • 为图层设置遮罩(layer.mask
  • 将图层的layer.masksToBounds / view.clipsToBounds属性设置为true
  • 将图层layer.allowsGroupOpacity属性设置为YESlayer.opacity小于1.0
  • 为图层设置阴影(layer.shadow *)。
  • 为图层设置光栅化 layer.shouldRasterize=true
  • 具有layer.cornerRadiuslayer.edgeAntialiasingMasklayer.allowsEdgeAntialiasing的图层
    当然也不是所有的圆角都会导致离屏渲染
  • 文本(任何种类,包括UILabelCATextLayerCore Text等)。
  • 使用CGContextdrawRect :方法中绘制大部分情况下会导致离屏渲染,甚至仅仅是一个空的实现。

既然离屏渲染这么不好,为什么我们还要强制开启呢?

当一个图像混合了多个图层,每次移动时,每一帧都要重新合成这些图层,十分消耗性能。当我们开启光栅化后,会在首次产生一个位图缓存,当再次使用时候就会复用这个缓存。但是如果图层发生改变的时候就会重新产生位图缓存。所以这个功能一般不能用于 UITableViewCell中,cell的复用反而降低了性能。最好用于图层较多的静态内容的图形。而且产生的位图缓存的大小是有限制的,一般是2.5个屏幕尺寸。在100ms之内不使用这个缓存,缓存也会被删除。所以我们要根据使用场景而定。

如何避免离屏渲染?

1.圆角的优化:

1:使用贝塞尔曲线UIBezierPath和Core Graphics框架画出一个圆角
2、使用CAShapeLayer和UIBezierPath设置圆角
总的来说就是用CAShapeLayer的内存消耗少,渲染速度快,建议使用优化方案2。

2.shadow

对于shadow,如果图层是个简单的几何图形或者圆角图形,我们可以通过设置shadowPath来优化性能,能大幅提高性能。示例如下:

mageView.layer.shadowColor=[UIColorgrayColor].CGColor;
imageView.layer.shadowOpacity=1.0;
imageView.layer.shadowRadius=2.0;
UIBezierPath *path=[UIBezierPathbezierPathWithRect:imageView.frame];
imageView.layer.shadowPath=path.CGPath;

我们还可以通过设置shouldRasterize属性值为YES来强制开启离屏渲染。其实就是光栅化(Rasterization)。

http://www.yayakq.cn/news/926524/

相关文章:

  • 做网站有er图wordpress换字体颜色
  • 加外链网站做视频网站要什么
  • 网站 设计 案例 简单广告册设计公司
  • html5 电商网站布局温州企业网站设计
  • 宝安公司可以网站设计中国建筑网官网查询报考
  • 企业品牌类网站做网站维护的人叫啥
  • 数学教学网站开发电脑优化工具
  • 域名的网站建设方案书怎么写做公司网站注意什么
  • 免费网页制作的网站页面模板在公号什么地方显示
  • 葫芦岛做网站价格it运维外包费用标准
  • 法律咨询微信网站建设网站建设jw100
  • 怎么创立网站湖州网
  • asp.ney旅游信息网站下载 简洁wordpress赞赏
  • 乐清在线网嘉兴seo网站优化
  • 杂志社网站建设意义wordpress下载站批量
  • 自己做店招的网站建设网站思路
  • 陕西网站建设陕icp备网站做百度推广为什么没人咨询
  • 河南大学学科建设处网站西青网站开发
  • 科技网站建设+长沙wordpress主题+演示数据
  • 天津 做网站河北建筑培训网实名认证
  • 网站推广的具体内容好利蛋糕店官方网站
  • 惠安网站建设我国中小企业名单
  • 网站建设与运营的预算方案数字营销平台
  • 在小型网站建设小组中的基本漯河网站建设 付永磊
  • 哪些企业用wordpress建站网页制作软件有哪些
  • 购物网站的搜索功能是怎么做的北京网站建站网
  • 建设机械官方网站网站建设什么因素最重要性
  • 网站搭建环境网站服务器ip地址怎么查
  • 网站建设服务联享科技wordpress定时任务
  • wordpress培训机构网站优化有哪些类型