简介
 在UIKit中,对UIView封装了很多类方法来进行简单的动画实现,在动画过程中,通过对属性值的修改来完成一系列的效果。 
  在IOS4以前,主要通过 
  + beginAnimation 
  + setAnimationDuration:设置动画时长 
  + setAnimationDelay:设置延迟时间 
  + setAnimationDelegate:设置代理 
  code..... 写入一些属性改变例如仿射变换,透明度等 
  + commitAnimation 
  代理可以监听一些事件,比如动画结束后,可以调用代理方法进行一系列处理。 
  在IOS4以后,伴随着Block语法,有了更好的方法 
  + animateWithDuration:delay:options:animations:completion: 
  前两个属性前面见过,第三个属性主要设置动画的速度效果,比如渐入渐出(EaseInOut),匀速(Linear)等
 
  animations后面是一个块语法,设置动画的相关效果。 
  completion后面也是一个块语法,设置动画完成后执行的代码。 
 简单的位移动画
- (void)translateAnimation
{[UIView animateWithDuration:1delay:1options:UIViewAnimationOptionCurveEaseInOutanimations:^{_imageView.center = CGPointMake(270, 410);} completion:^(BOOL finished) {NSLog(@"done");}];
}这个方法实现了通过设置属性的位移动画
 我们还可以通过这个类方法对透明度,大小等等几乎所有属性进行改变增加动画效果 
 增加仿射变换
- (void)transformAnimation
{[UIView animateWithDuration:3delay:1options:UIViewAnimationOptionCurveEaseInanimations:^{_imageView.center = CGPointMake(270, 410);_imageView.transform = CGAffineTransformRotate(CGAffineTransformScale(_imageView.transform, 0.6, 0.6), M_PI);_imageView.alpha = 0.0;} completion:^(BOOL finished) {NSLog(@"done");}];
}在这个方法中,对UIImageView的transform属性设置进行了嵌套,在旋转180度的同时进行了缩放。由于设置了alpha,所以也还有一个渐渐消失的效果。
 一般来说,如果通过设置alpha为0后,需要从父视图中remove掉这个对象。 
 利用completion设置连续动画
- (void)transformAnimation
{[UIView animateWithDuration:3delay:1options:UIViewAnimationOptionCurveEaseInanimations:^{_imageView.center = CGPointMake(270, 410);_imageView.transform = CGAffineTransformRotate(CGAffineTransformScale(_imageView.transform, 0.6, 0.6), M_PI);_imageView.alpha = 0.0;} completion:^(BOOL finished) {NSLog(@"done");[UIView animateWithDuration:3delay:0options:UIViewAnimationOptionCurveEaseInanimations:^{_imageView.center = CGPointMake(50, 50);_imageView.transform = CGAffineTransformIdentity;_imageView.alpha = 1.0;} completion:nil];}];
} 我们在上个方法的基础上进行了修改,在completion中又加入了一个动画效果,使这个图片恢复到最初的状态。 
  这里面CGAffineTransformIdentity为单位矩阵,是他的transform属性回复到原貌。 
 利用NSTimer完成连续动画
 我们也可以使用定时器来完成连续动画效果 
  先增加两个私有成员,并且可以根据调试效果来设置_step初值 
 @interface ViewController ()
{NSTimer *_timer;NSInteger _step;
}然后是方法
- (void)timerAnimation
{_timer = [NSTimer scheduledTimerWithTimeInterval:0.05target:selfselector:@selector(animateWithTimer)userInfo:nilrepeats:YES];
}- (void)animateWithTimer
{if (_step == 0) {[_timer invalidate];[_imageView removeFromSuperview];}_imageView.transform = CGAffineTransformRotate(CGAffineTransformScale(_imageView.transform, 0.98, 0.98), ((10 * M_PI) / 180.0));_imageView.alpha *= 0.98;_step--;
}虽然没有使用UIView封装的方法,但是也简单的实现了一个动画效果。
 以上就是本篇博客全部内容,欢迎指正和交流。转载注明出处~