CATransaction

当我们在自定义的图层上修改某些支持动画的属性时,系统会为该属性的修改自动产生动画。这种其实属于隐式动画。隐式动画要得益于CATransaction. 一个CATransaction从调用CATransaction.begin()开始,以CATransaction.commit()结束。在这其间对图层属性的修改,会受该Transaction的控制,可以通过setAnimationDuration修改Transaction的duration.

系统的隐式动画是因为在Runloop的每个周期,系统会自动调用CATransaction.begin()和commit()方法,默认的duration时0.25秒。当然我们也可以在代码中自己通过调用begin()将自己的Transaction压栈,从而定义不同的配置。

但是UIView相关联的layer默认是禁掉了隐式动画功能。所以系统为我们提供了UIView.animationWithDuration方法。其实就是在内部调用了CATransaction.begin()和commit()方法来实现。

CABasicAnimation/CAKeyframesAnimation

这两个类都是CAPropertyAnimation的派生类,他们都是用来显式的对某个属性进行动画。

CABasicAnimation:可以配置fromValue,toValue来定义从fromValue到toValue的过度动画。

CAKeyframesAnimation:可以配置keyTimes和values来定义一组关键值和对应的时间节点,来定义这些关键值之间的过渡动画

这两个类都是只产生一个过渡效果呈现出来,动画结束后,属性的值仍然不会被改变。需要设置Animation对象的delegate和在delegate对象中实现

override func animationDidStop(anim: CAAnimation, finished flag: Bool) 来接受动画结束的通知,在这里来最终改变属性的值。

CATransition

对于不支持动画的属性,我们可以用CATransition来使用预定义的动画来产生过渡效果。我的理解是Transition会应用于当前Runloop周期中图层上所有产生的变化,新添加的图层,属性的变化....

Transition有几个关键属性

type属性定义要应用的动画类型,有如下选项:

1. 系统定义的常量 
     kCATransitionFade   交叉淡化过渡 
     kCATransitionMoveIn 新视图移到旧视图上面 
     kCATransitionPush   新视图把旧视图推出去 
     kCATransitionReveal 将旧视图移开,显示下面的新视图 
  
 2.系统未定义为常量,用字符串表示 
     pageCurl            向上翻页 
     pageUnCurl          向下翻页 
     rippleEffect        滴水效果 
     suckEffect          收缩效果,如一块布被抽走 
     cube                立方体效果 
     oglFlip             上下翻转效果

subtype属性用来定义某些type的动画方向,有如下值可选:

kCATransitionFromTop

kCATransitionFromBottom

kCATransitionFromRight

kCATransitionFromLeft

CAMediaTiming协议

该协议定义了动画过程中的时间控制,有如下主要属性

duration 一个动画周期的时间

repeatCount 重复次数

beginTime 动画从加入到开始的延迟时间

speed 动画速度,默认为1.0,如果设为2.0,则动画速度增加一倍,相当于动画时间减小为原来的一半

timeOffset 设置动画从某个时间点开始

CAAnimation和CALayer都实现了这个协议,因此我们可以设置CALayer的属性来统一控制加入到图层的所有动画,也可以通过设置CAAnimation的属性来控制动画。

iOS学习笔记:iOS核心动画中的常用类型的更多相关文章

  1. iOS学习笔记-自定义过渡动画

    代码地址如下:http://www.demodashi.com/demo/11678.html 这篇笔记翻译自raywenderlick网站的过渡动画的一篇文章,原文用的swift,由于考虑到swif ...

  2. iOS学习笔记09-核心动画CoreAnimation

    http://www.cnblogs.com/liutingIOS/p/5368536.html 一.CALayer CALayer包含在QuartzCore框架中,具有跨平台性,在iOS中使用Cor ...

  3. iOS 学习笔记六 【APP中的文字和APP名字的国际化多语言处理】

    今天为新手解决下APP中的文字和APP名字的国际化多语言处理, 不多说了,直接上步骤: 1.打开你的项目,单机project名字,选中project,直接看图吧: 2.创建Localizable.st ...

  4. iOS学习笔记——iOS高级控件

    UITableView UITableView的样式有两种,一种是Grouped(左图),另一种是Plain(右图),如下图,它的属性是style,类型为UITableViewStyle,枚举值分别是 ...

  5. Python学习笔记整理(三)Python中的动态类型简介

    Python中只有一个赋值模型 一.缺少类型声明语句的情况 在Python中,类型是在运行过程中自动决定的,而不是通过代码声明.这意味着没有必要事声明变量.只要记住,这个概念实质上对变量,对象和它们之 ...

  6. iOS学习笔记10-UIView动画

    上次学习了iOS学习笔记09-核心动画CoreAnimation,这次继续学习动画,上次使用的CoreAnimation很多人感觉使用起来很繁琐,有没有更加方便的动画效果实现呢?答案是有的,那就是UI ...

  7. iOS学习笔记-自己动手写RESideMenu

    代码地址如下:http://www.demodashi.com/demo/11683.html 很多app都实现了类似RESideMenu的效果,RESideMenu是Github上面一个stars数 ...

  8. iOS学习笔记-精华整理

    iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...

  9. iOS学习笔记总结整理

    来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...

随机推荐

  1. ASP.NET 运行机制续(完结)

    上一篇说到applicationInstance会执行一些列的事件.下面是我在msdn上找到有关asp.net程序生命周期相关的描述及图片 声明周期的起始 ASP.NET 应用程序的生命周期以浏览器向 ...

  2. AVPlayer的基本使用

    2014-5-7 06:46| 发布者: admin| 查看: 437| 评论: 0   摘要: 在iOS开发中,播放视频通常有两种方式,一种是使用MPMoviePlayerController(需要 ...

  3. Java高效读取大文件

    1.概述 本教程将演示如何用Java高效地读取大文件.这篇文章是Baeldung (http://www.baeldung.com/) 上“Java——回归基础”系列教程的一部分. 2.在内存中读取 ...

  4. Java 8 VM GC Tuning Guide Charter3-4

    第三章 Generations One strength of the Java SE platform is that it shields the developer from the compl ...

  5. JSON-JObject

    http://james.newtonking.com/json/help/index.html http://www.cnblogs.com/usharei/archive/2012/04/24/2 ...

  6. linux下php多版本的并存实现

    其实最简单的方法,就是通过nginx,生成多个php使用不同的端口,这实在简单,我写了两个版本,一个是apche服务,一个是nginx服务,使用一两个不同的版本,爽!

  7. C#快速排序算法基础入门篇

    相信算法对于许多开发人员来说都是一大难点,之所以难,就像设计模式一样,许多人在阅读之后,没有很好地理解,也不愿意动手上机操作,只停留在理论的学习上面,随着时间推移就慢慢淡忘. 有些东西,你可以发明创造 ...

  8. jsp的常用指令有哪些(编译指令/动作指令整理)

    jsp的常用指令有哪些(编译指令/动作指令整理) JSP动作指令 JSP - JSP中的脚本.指令.动作和注释

  9. mysql 。。。

    MySQL的相关概念介绍 MySQL 为关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格 ...

  10. 官方 Animator 例子解析 Animator.MatchTarget

    一.官方的解释 Animator.MatchTargetSwitch to Manual ); Parameters matchPosition The position we want the bo ...