iOS CoreAnimate 东西比较多,这篇笔记是入门用的,主要讲述的是静态的图形绘画处理问题。(当然动画也只是一小部分)理解相关的概念问题:
 
  • 参考资料
http://segmentfault.com/a/1190000000390012  (非常好的文章,受益匪浅,关键词:离屏渲染)
工具:Instrument的Core Animation 有一个叫做Color Offscreen-Rendered Yellow的选项。它会将已经被渲染到屏幕外缓冲区的区域标注为黄色(这个选项在模拟器中也可以用)。同时确保勾选Color Hits Green and Misses Red选项。绿色代表无论何时一个屏幕外缓冲区被复用,而红色代表当缓冲区被重新创建。
 
阐述提炼:一般来说,你需要避免离屏渲染。因为这个开销很大。在屏幕上面直接合成层要比先创建一个离屏缓存然后在缓存上面绘制,最后再绘制缓存到屏幕上面快很多。这里面有2个上下文环境的切换(切换到屏幕外缓存环境,和屏幕环境)。
 
产生离屏渲染的情况:如果你直接或是间接的给一个层增加了遮罩。Core Animation 会为了实现遮罩强制做离屏渲染。这个增加了GPU的负担,因为一般上来,这些都是直接在屏幕上面渲染的。
如果你使用的层引发了离屏渲染,那么你最好避免这种方式。还有设置圆角,设置阴影都会造成离屏渲染。
 
应用:对于遮罩来说,圆角只是一个特殊的遮罩。clipsToBounds 和 masksToBounds 2个属性而已。你可以简单的创建一个已经设置好遮罩的层创建内容。比如,使用已经设置了遮罩的图片。当然,这个也是一种权衡。如果你希望在层的contents属性这只一个矩形的遮罩,那你更应该使用contentsRect而不是使用遮罩。
 
这个网址介绍了:设置透明度的影响,以及wwdc相关的教程:
  • WWDC 2012:

    • 406: Adopting Automatic Reference Counting
    • 238: iOS App Performance: Graphics and Animations
    • 242: iOS App Performance: Memory
    • 235: iOS App Performance: Responsiveness
    • 409: Learning Instruments
    • 706: Networking Best Practices
    • 514: OpenGL ES Tools and Techniques
    • 506: Optimizing 2D Graphics and Animation Performance
    • 601: Optimizing Web Content in UIWebViews and Websites on iOS
    • 225: Up and Running: Making a Great Impression with Every Launch
  • WWDC 2011:

    • 105: Polishing Your App: Tips and tricks to improve the responsiveness and performance
    • 121: Understanding UIKit Rendering
    • 131 performance optimization on iphone os
    • 308: Blocks and Grand Central Dispatch in Practice
    • 323: Introducing Automatic Reference Counting
    • 312: iOS Performance and Power Optimization with Instruments
 
 
 
  • 优化APP的例子
 
实际例子应用:常见的应用开发中,使用圆角的icon,最简单的方式,设置View的Layer,设置圆角的弧度宽度等。
a.最直接的做法:我们直接在cellForRowAtIndexPath代理中,设置:
甚至设置阴影等效果。更具上面的介绍,已经清楚的知道:
这个view会经过离屏渲染,然后再输出到屏幕上,每次都会重绘边框,再整个cell输出到我们见到的视图上。可以通过自带的视图展示工具查看视图结构:
接着通过一些检测工具,我这边使用的是:KMCGeigerCounter,自带的检测工具也有,都可以。
可以用Instrument的Core Animation分析可以看到,图片使用的是离屏渲染技术,还是一整个矩形。(可以对比其他知名软件,qq,微信等)
可以看到非常的卡,体验非常差。占用内存情况增大,这里我特意使用了一张大的图片,方便查看比较。(11.3MB  37帧数快速滑动的时候)
接着,进行改良优化,把上面的圆角这些设置放到cell初始化中。(11.3MB 40帧数快速滑动的时候)数据上看,改良了一点点,还是不可容忍的卡。
这样子是不行的,分析一下,原因,每一个cell中,就算是重用,view中的内容改变了,其实Layer还是重新进行渲染的,渲染的时候,还有转折输出两次。
我们考虑用一个方法,自己手绘一个layer,他如果本来就不是方形的,本来就是圆角的话呢?试一下:
我这里使用的是方法二,简洁,容易修改。逻辑原理都是一样的。
运行测试,效果挺好的,mark一下,总算不卡了。
这里申明一下,查阅资料的时候:layer 的 masksToBound 和  clipsToBounds 上效果是一样的,同一个接口来的,view是封装了layer改了个名字而已。我测试了,帧数没有变化,看着别人clang出来的源码也是没有变化的,不服来辩,请上源码。

iOS CoreAnimate的更多相关文章

  1. iOS CoreAnimate 动画实现

    这里主要讲的是使用CoreAnimate实现所需的动画. 先上官网的介绍:https://developer.apple.com/library/ios/documentation/Cocoa/Con ...

  2. iOS可视化动态绘制连通图

    上篇博客<iOS可视化动态绘制八种排序过程>可视化了一下一些排序的过程,本篇博客就来聊聊图的东西.在之前的博客中详细的讲过图的相关内容,比如<图的物理存储结构与深搜.广搜>.当 ...

  3. 【疯狂造轮子-iOS】JSON转Model系列之二

    [疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...

  4. 【疯狂造轮子-iOS】JSON转Model系列之一

    [疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...

  5. iOS总结_UI层自我复习总结

    UI层复习笔记 在main文件中,UIApplicationMain函数一共做了三件事 根据第三个参数创建了一个应用程序对象 默认写nil,即创建的是UIApplication类型的对象,此对象看成是 ...

  6. iOS代码规范(OC和Swift)

    下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...

  7. JS调用Android、Ios原生控件

    在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...

  8. 告别被拒,如何提升iOS审核通过率(上篇)

    iOS审核一直是每款移动产品上架苹果商店时面对的一座大山,每次提审都像是一次漫长而又悲壮的旅行,经常被苹果拒之门外,无比煎熬.那么问题来了,我们有没有什么办法准确把握苹果审核准则,从而提升审核的通过率 ...

  9. Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

    本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...

随机推荐

  1. float和double精度问题

    System.out.println(new BigDecimal(253.90).doubleValue() * 100);25390.0精度正确 System.out.println(new Bi ...

  2. 学C日志

    学C历程 这里记录的都是笔记 忘记了好回头看看~ 提示 :如果在双击自己编译的程序运行时一下就消失不见了 可以在程序代码末尾加上 system("pause"); 程序就会等待到输 ...

  3. Java中避免表单重复提交

    表单的重复提交: 没有完整的进行一次,先请求表单页面->再提交表单过程而完成数据提交 造成的根本原因: 没有完整的进行一次,先请求表单页面->再提交表单过程. 造成重复提交的现象: 由于服 ...

  4. phar文件的使用

    1.用php命令行 php phar文件 2.生成bat文件,在命令行下使用,以composer.phar为例 ( 1)在php.exe所在目录新建composer.bat文件 (2)把compose ...

  5. Head First 设计模式之工厂模式(Factory Pattern)

    前言: 除了使用new操作符之外,还有更多制造对象的方法.你将了解到实例化这个活动不应该总是公开的进行,也会意识到初始化会造成“耦合”的问题.工厂模式将会从复杂的依赖中帮你脱困. 1.   简单的工厂 ...

  6. net不安装Oracle11g客户端直接使用ODAC

    好处: 1.不安装客户端也能访问服务器上的oracle(假设Application Server与DB Server 分开) 2.不需要安装ODAC 3.不需要配置TnsNames.Ora文件 缺点: ...

  7. CentOS MySQL 配置

    问题: MySQL安装后root用户无法连接,提示 ERROR 1045 (28000): Access denied for user ’root’@’localhost’ (using passw ...

  8. 虚幻4外包团队-推荐非常全面的的Unreal教程

    <Unreal SDK 游戏开发从入门到精通(UnrealScript语法.UI Scene界面.UDK独立开发游戏)> 课程讲师:Shark  课程分类:.net 适合人群:初级 课时数 ...

  9. 02shell编程环境的搭建

    02shell编程环境的搭建 [02]Shell编程 02shell编程环境的搭建 在不同的操作系统上搭建shell编程环境 Linux Windows Mac 编辑器的选择 系统环境的搭建 注: 选 ...

  10. 【uTenux】学习一个嵌入式操作系统-uTenux

    [这个是汇总] 最近有点时间,参加了EEPW论坛和悠龙咨询组织的一个嵌入式操作系统uTenux试用活动.本来想借助这个活动提供的开发板做一个小项目,奈何OS使用功底太次.于是,这个活动被我降低到了学习 ...