使用CALayer的mask实现注水动画效果



Core Animation一直是iOS比较有意思的一个主题,使用Core Animation可以实现非常平滑的炫酷动画。Core animtion的API是较高级的封装,使用便捷,使得我们免于自己使用OpenGL实现动画。本文主要介绍如何使用CALayer的mask实现一个双向注水动画(姑且这么叫吧)。






了解CALayer的mask



以上是CALayer的头文件关于mask的说明,mask实际上layer内容的一个遮罩。

如果我们把mask是透明的,实际看到的layer是完全透明的,也就是说只有mask的内容不透明的部分和layer叠加的部分才会显示出来,效果如下:






设计的思路参考[《基于Core Animation的KTV歌词视图的平滑实现》](http://www.iwangke.me/2014/10/06/how-to-implement-a-core-animation-based-60-fps-ktv-lyrics-view/),[Facebook Shimmer](https://github.com/facebook/Shimmer)。




在`View`上重叠放置两个`UIImageView`: `grayHead`&`greenHead`,默认`greenHead`会遮挡住`grayHead`。为`greenHead`设置一个`mask`,这个mask不是普通的`mask`,它由两个`subLayer`:`maskLayerUp``maskLayerDown`组成。默认情况下,`subLayer`都显示在`mask`内容之外,此时`mask`实际上透明的,由此`greenHead`也是透明的。现在我们希望`greenHead`从左上角和右下角慢慢显示内容,那么我们只需要从两个方向为`greenHead`填充内容就可以了。



[完整代码](https://github.com/wuwen1030/CALayerAnimationDemo)


   小结



CALayer提供另外一种操作UI的手段,虽然它提供的API比UIView较底层,但它能提供更加丰富的功能和更高的性能(CALayer的动画是在专门的线程渲染的)。涉及到复杂且性能要求高的UI界面,CALayer的作用就比较明显了,比如AsyncDisplayKit。通过本片文章,我们其实也能看出CALayer的一个用处,通常我们处理圆角时会直接去修改CALayer的cornerRadius,但这种做法性能比较差,尤其是放在列表里的时候,现在我们有了mask,这样我们可以直接改变layer的mask,而不会影响到图形渲染的性能。

iOS Core Animation之CALayer心得的更多相关文章

  1. iOS - Core Animation 核心动画

    1.UIView 动画 具体讲解见 iOS - UIView 动画 2.UIImageView 动画 具体讲解见 iOS - UIImageView 动画 3.CADisplayLink 定时器 具体 ...

  2. iOS Core Animation 简明系列教程

    iOS Core Animation 简明系列教程  看到无数的CA教程,都非常的难懂,各种事务各种图层关系看的人头大.自己就想用通俗的语言翻译给大家听,尽可能准确表达,如果哪里有问题,请您指出我会尽 ...

  3. 转 iOS Core Animation 动画 入门学习(一)基础

    iOS Core Animation 动画 入门学习(一)基础 reference:https://developer.apple.com/library/ios/documentation/Coco ...

  4. iOS Core Animation学习总结(1)--CALayer常用属性

    图层是core animation的基础, UIView之所以能显示在屏幕上,靠的是其内部的这个图层,即每个UIView 都有 CALayer,可通过UIView.layer或者[UIView lay ...

  5. IOS Core Animation Advanced Techniques的学习笔记(五)

    第六章:Specialized Layers   类别 用途 CAEmitterLayer 用于实现基于Core Animation粒子发射系统.发射器层对象控制粒子的生成和起源 CAGradient ...

  6. IOS Core Animation Advanced Techniques的学习笔记(四)

    第五章:Transforms   Affine Transforms   CGAffineTransform是二维的     Creating a CGAffineTransform   主要有三种变 ...

  7. IOS Core Animation Advanced Techniques的学习笔记(一)

    转载. Book Description Publication Date: August 12, 2013 Core Animation is the technology underlying A ...

  8. iOS——Core Animation 知识摘抄(三)

    原文地址:http://www.cocoachina.com/ios/20150105/10827.html CAShapeLayer CAShapeLayer是一个通过矢量图形而不是bitmap来绘 ...

  9. iOS——Core Animation 知识摘抄(二)

    阴影 主要是shadowOpacity .shadowColor.shadowOffset和shadowRadius四个属性 shadowPath属性 我们已经知道图层阴影并不总是方的,而是从图层内容 ...

随机推荐

  1. Struts2基础使用教程:OGNL

    取自<JAVAWEB整合开发王者归来> 是一种类似EL的语言,比EL强大的多 能访问对象的方法,例如list.size() 能访问静态属性与静态方法,方法是在类名前.方法前加上@.如@ja ...

  2. Nopcommerce 二次开发1 基础

    1  Doamin    酒店 namespace Nop.Core.Domain.Hotels { /// <summary> /// 酒店 /// </summary> p ...

  3. Python-4 变量、字符串

    #1 变量 1)使用前 先赋值 2)命名 字母.数字.下划线 且 不由数字开头 3)大小写不等 4)名字=值 5)尽量选取专业的名字 #2 字符串(文本) 1)字符串两边加引号 2)转义字符 \(反斜 ...

  4. win7操作系统32位或是64位系统上安装 sql2005 点滴

    在 win7 上这安装 sql2005 ,需要 .netFramewori2.0 框架,更需要 IIS 支持.否则 sqlserver2005 安装 到最后,就会失败,但此时已经在机器上安装了 .ne ...

  5. session management

    The session does not created until the HttpServletRequest.getSession() method is called.

  6. APNS 服务推送通知

    1. 将app注册notification里面, 并从APNS上获取测试机的deviceToken. - (BOOL)application:(UIApplication *)application ...

  7. Hibernate部署问题总结

    出现未知实体类(- org.hibernate.MappingException: Unknown entity),找不到cfg.xml包 (org.hibernate.internal.util.c ...

  8. hibernate 左链接查询

    select pro from Provide as pro left join pro.labels as la left join pro.city as c where 1=1

  9. ubuntu访问supermicro ikvm

    https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-get-on-ubuntu-16-04 安装 ...

  10. PHPSTORM 10.0.3 --PHP Interpreter is not configured

    PHP Interpreter is not configured Please configure PHP Interpreter to use built-in weberver