1. UIImage动画
最基本的动画
使用UIImage对象快速切换图片形成动画效果
适合做一些小的动画方面
[UIImage animatedImageNamed:@"一连续的图片名(image)"duration:0.2];如:image1.png image2.png....
2.NSTimer类构建动画
2.1 NSTimer类
是一个计时器类,用于定时的向指定对象发送指定消息
[NSTimer scheduledTimerWithTimeInterval:参数1 target:参数2 selector:参数3 userInfo:nil repeats:参数4];
参数1:响应的时间间隔 参数2:设置目标对象,一般指(self) 参数3:调用响应的事件 参数4:回答是否重复调用NSTimer对象创建好之后马上开始计时。
NSTimer*timer=[[NSTimer alloc]initWithFireDate:(NSDate *) interval:(NSTimeInterval) target:(id) selector:(SEL) userInfo:(id) repeats:(BOOL)];
对象创建好后,需要fire(开始)的时间。
2.2 匀速动画
当前值 = 开始值 + 当前的帧数 * (结束值 - 开始值) / (帧率*动画时长)
static NSUInteger times=0;
self.imageView.alpha = 0 + self.times * (1 - 0) / (FPS * DURATION);一个图片视图透明度从0-1的一个云变过程。
times++;
2.3 变速动画
当前值 = 上一次值 + (目标值 - 上一次值) * 渐进因子
261 = 300 + (-90 - 300) * 0.1
225 = 261 + (-90 - 261) * 0.1
193 = 225 + (-90 - 225) * 0.1
CGPoint center = self.imageView.center;
center.y = center.y + (self.imageView.frame.size.height - center.y) * 0.1;
self.imageView.center = center;
逐渐减速的 改变一个图片视图的y轴位置
3. UIView动画
3.1 是什么
是UIKit提供的专门制作动画的API, 本质上是对更底层的CoreAnimation的封装。
可以轻松的制作动画
3.2 制作动画的步骤:
1> 设置需要动画的视图的初始属性
2> 给UIView类发消息,告诉UIView需要什么动画
3> 将动画结束后的状态(属性值)写入到Block中
3.3 高级动画
1> options:
UIViewAnimationOptionCurveEaseInOut //先变快后变慢
UIViewAnimationOptionCurveEaseIn //越来越快
UIViewAnimationOptionCurveEaseOut //越来越慢
UIViewAnimationOptionCurveLinear //匀速
//动画的同时允许用户交互
UIViewAnimationOptionAllowUserInteraction
//动画从当前状态开始,否则从初始状态开始
UIViewAnimationOptionBeginFromCurrentState
//动画重复
UIViewAnimationOptionRepeat
//动画在重复的基础上,是否需要反向动画
UIViewAnimationOptionAutoreverse
如:一个图片视图从下往上动画例子
CGPoint center = self.aircraftImageView.center;
center.y -= 360;//动画结束时动画视图Y轴所再的位置
CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI);// 添加旋转变形
[UIView animateWithDuration:2.0 //动画时长
delay:0 //加载视图到动画开始的时间
options: //添加动画
UIViewAnimationOptionCurveEaseInOut |
UIViewAnimationOptionRepeat |
UIViewAnimationOptionAutoreverse
animations:^{ //不断的修改变形 位置 来达到动画的效果
self.aircraftImageView.transform = transform;
self.aircraftImageView.center = center;
} completion:^(BOOL finished) {
//动画结束后会执行的代码
}];