iOS学习笔记:iOS核心动画中的常用类型
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核心动画中的常用类型的更多相关文章
- iOS学习笔记-自定义过渡动画
代码地址如下:http://www.demodashi.com/demo/11678.html 这篇笔记翻译自raywenderlick网站的过渡动画的一篇文章,原文用的swift,由于考虑到swif ...
- iOS学习笔记09-核心动画CoreAnimation
http://www.cnblogs.com/liutingIOS/p/5368536.html 一.CALayer CALayer包含在QuartzCore框架中,具有跨平台性,在iOS中使用Cor ...
- iOS 学习笔记六 【APP中的文字和APP名字的国际化多语言处理】
今天为新手解决下APP中的文字和APP名字的国际化多语言处理, 不多说了,直接上步骤: 1.打开你的项目,单机project名字,选中project,直接看图吧: 2.创建Localizable.st ...
- iOS学习笔记——iOS高级控件
UITableView UITableView的样式有两种,一种是Grouped(左图),另一种是Plain(右图),如下图,它的属性是style,类型为UITableViewStyle,枚举值分别是 ...
- Python学习笔记整理(三)Python中的动态类型简介
Python中只有一个赋值模型 一.缺少类型声明语句的情况 在Python中,类型是在运行过程中自动决定的,而不是通过代码声明.这意味着没有必要事声明变量.只要记住,这个概念实质上对变量,对象和它们之 ...
- iOS学习笔记10-UIView动画
上次学习了iOS学习笔记09-核心动画CoreAnimation,这次继续学习动画,上次使用的CoreAnimation很多人感觉使用起来很繁琐,有没有更加方便的动画效果实现呢?答案是有的,那就是UI ...
- iOS学习笔记-自己动手写RESideMenu
代码地址如下:http://www.demodashi.com/demo/11683.html 很多app都实现了类似RESideMenu的效果,RESideMenu是Github上面一个stars数 ...
- iOS学习笔记-精华整理
iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...
- iOS学习笔记总结整理
来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...
随机推荐
- 学习asp.net mvc5心得
前几天时间大体学习了一下asp.net mvc5的应用,感觉最主要的就是要区分这以模式设计,其他的都是在asp.net下的基础操作 1参数的传递注意 2路由的设置规则 3model的应用
- 深入理解ThreadLocal(一)
Android里,在不同的线程(假设子线程已经创建了Looper)中创建Handler时,并不需要显式指定Looper,系统能自动找到该线程自己的Looper.不同线程的Looper相互独立,之所以能 ...
- Careercup - Facebook面试题 - 4922014007558144
2014-05-01 02:13 题目链接 原题: Design question: Say you have hacked in to a network and can deploy your b ...
- 剑指offer--面试题11
题目:求数值的整数次方,不考虑大数值情况 即实现函数:double Power(double base, int exponent) 自己所写代码如下: #include "stdafx.h ...
- NYOJ-733 万圣节派对 AC 分类: NYOJ 2014-01-02 00:41 303人阅读 评论(0) 收藏
#include <stdio.h> #include <math.h> int main() { int t, a, b, i, j, n; scanf("%d&q ...
- 2014 Multi-University Training Contest 6
官方解题报告:http://blog.sina.com.cn/s/blog_a19ad7a10102uz2v.html Apple Tree http://acm.hdu.edu.cn/showpro ...
- C++中的mutable关键字
mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词. 在C++中,mutable也是为了突破const的限制而设置的.被mutable修饰的变量,将永远 ...
- [设计模式] 3 创建者模式 builder
转载http://blog.csdn.net/wuzhekai1985/article/details/6667467 建造者模式的定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不 ...
- Java中super的用法并与this的区别(转载)
一.子类中如果需要调用父类中的构造函数,则需要使用super(),且必须在构造函数中的第一行 public class Demo1 { public static void main(String[] ...
- 安卓 unit 测试与 instrument 测试的代码共享
假如你有一款安卓应用,其包含一系列测试类,其中一部分是unit 测试(位于 src/test),其余为instrument 测试(位于 src/androidTest). 那么问题来了:你有一些想在所 ...