1.UIKit层面的动画
预备:动画 — 帧动画
每一帧是一张静态的图片,1秒钟24帧时,人眼就已经无法感受到图片的切换过程,于是有动画的连续
1.1UIImage
1.2UIImageView
// [UIView animateWithDuration:2 animations:^{
// //动画结束时的状态
// self.imageView.center = endCenter;
// }];
/*
参数
1.动画持续时间
2.等待时间, 多久后开始运行动画
3.动画的选项 (匀速 变速 重复)
4.Block中是动画结束时视图的状态
5.Block在动画结束时调用
*/
[UIView animateWithDuration:2 delay:3 options:UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionRepeat animations:^{
self.imageView.center = endCenter;
self.imageView.transform = CGAffineTransformMakeRotation(M_PI);
} completion:^(BOOL finished) {
NSLog(@"动画完成了");
}];
//转场动画
//options 选Transition
[UIView transitionWithView:self.imageView duration:1 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{
self.imageView.image = [UIImage imageNamed:@”Welcome_3.0_3.jpg”];
} completion:nil];
1.3NSTimer定时器
创建定时器: 【 NSTimer scheduledxxx 】创建定时器时就自动启动
销毁定时器:【NSTimer invalidate】
alpha、frame、center
1.4UIView
系统为UIView提供的专门用于控制视图实现动画的方法,这些方法是以类方法出现的,方法名开头为animate。。。
核心思想:
在动画前设置好要修改的视图的起始状态
在方法内,说明动画结束时视图的状态
不需要关注中间的变化过程,只需说明视图的动画结束时什么样,系统就会为这个过程自动添加动画
2.Core Animation层面的动画
2.1 CALayer 层(显示的基础)
UIView 核心显示功能就是依靠CALayer实现的
UIView和CALayer的关系:
1)UIView的显示能力是依赖底层的CALayer实现的,每一个UIView都包含了一个CALayer对象,修改了CALayer,会影响表现出来的UIView的外观
2)UIView与CALayer最大的不同在于,layer是不能够响应事件的,UIView由于继承了UIResponder,所以还能够响应用户事件
1》如何获取UIView底层的那个CALayer对象呢?
通过 .layer 属性就能拿到底层的层对象
2》可以使用CALayer做哪些操作?
a)修改系统已有的UIView的layer
常用的属性:
backgroundColor
shadowxxxx
borderWidth
boradColor
cornerRadius
transform ( CATransform3D类型 )
与尺寸位置相关的三个重要 属性
bounds 大小
position 位置(点是父视图坐标系的点)
anchorPoint 锚点
锚点决定了层中的哪个点出现在position所指示的父层的位置上
b)创建新的Layer 使用类方法 layer
图片 CALayer
给contents属性赋 CGImageRef类型
文字 CATextLayer
给string属性赋字符串即可
图形 CAShapeLayer
给path属性赋CGPath对象即可
CALayer的很多属性都有 隐式动画,在修改该属性时,会自动出现动画效果,可以通过查看头文件中,属性上面出现 animatable这样的说明时,意味可以有隐式动画
2.2 CAAnimation动画
CA的动画,只能施加在CALayer上
CA动画与UIView动画最大的一个区别:
CA动画是假的,视图看着好像位置改变了,但其实没有变
UIView动画中,由于明确的设定了动画结束时视图的状态,所以,视图的数据会随着动画的结束而真的被改变
1》CAAnimation的子类之一:CABasicAnimation
基础动画,设置动画的起始和重点值即可
一定要设置keyPath属性,以此说明动画要修改的属性是哪个
2》CAAnimation的子类之二:CAKeyFrameAnimation
关键帧动画,可以定制动画过程中的细节,所以可以通过values属性记录中间变化的每一个细节,可以认为基础动画就是只有两个关键帧的动画,另外,关键帧动画最重要的效果就是 可以自定义动画路径,通过path属性记录
3》CAAnimation的子类之二:CAKeyFrameAnimation