iOS-动画效果(首尾式动画,代码快动画,核心动画,序列帧动画)

一.各个动画的优缺点

1.首尾动画:如果只是修改空间的属性,使用首尾动画比较方便,如果在动画结束后做后续处理,就不是那么方面了。

2.核心动画:有点在于对后续的处理方便。

3.块动画:

(1)在实际的开发中更常用的时block代码块来处理动画操作。

(2)块动画相对来说比较灵活,尤为重要的是能够将动画相关的代码编写在一起,便于代码的阅读和理解.

4.使用序列帧动画:对UIImageview和button按钮进行连线。

  1 #import "ViewController.h"
  2 
  3 @interface ViewController ()
  4 {
  5     UIView             *_view;
  6     UIImageView        *_imageView;
  7 }
  8 @end
  9 
 10 @implementation ViewController
 11 
 12 - (void)viewDidLoad {
 13     [super viewDidLoad];
 14 
 15     //用于block代码快动画,核心动画,UIView封装的首尾式动画
 16     _view = [[UIView alloc] init];
 17     _view.frame = CGRectMake(0, 20, 40, 40);
 18     _view.backgroundColor = [UIColor redColor];
 19     [self.view addSubview:_view];
 20     
 21     //用于序列帧动画
 22     _imageView = [[UIImageView alloc] init];
 23     _imageView.frame = CGRectMake(60, 20, 40, 40);
 24     _imageView.backgroundColor = [UIColor orangeColor];
 25     [self.view addSubview:_imageView];
 26 }
 27 
 28 #pragma mark 序列帧动画
 29 //- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
 30 //{
 31 //    NSMutableArray * arrayM = [NSMutableArray array];
 32 //    
 33 //    
 34 //    for (int i = 0; i < 4; i ++) {
 35 //        [arrayM addObject:[UIImage imageNamed:[NSString stringWithFormat:@"%d.png",i]]];
 36 //    }
 37 //    //设置动画数组
 38 //    [_imageView setAnimationImages:arrayM];
 39 //    
 40 //    //设置动画播放次数 MAXFLOAT:无穷大数,表示一直循环下去
 41 //    [_imageView setAnimationRepeatCount:MAXFLOAT];
 42 //    
 43 //    //设置动画播放时间(图片个数 * 计划的每张照片动画时长)
 44 //    [_imageView setAnimationDuration:4 * 0.75];
 45 //    
 46 //    //开始动画
 47 //    [_imageView startAnimating];
 48 //}
 49 
 50 
 51 #pragma mark block代码快动画
 52 //- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
 53 //{
 54 //    
 55 //    [UIView animateWithDuration:2.0 animations:^{
 56 //         NSLog(@"动画开始执行前的位置: %@",NSStringFromCGPoint(_view.center));
 57 //        _view.center = CGPointMake(self.view.bounds.size.width - 20, self.view.bounds.size.height - 20);
 58 //        
 59 //        
 60 //    } completion:^(BOOL finished) {
 61 //        NSLog(@"动画执行完毕后的位置: %@",NSStringFromCGPoint(_view.center));
 62 //    }];
 63 //}
 64 
 65 #pragma mark 核心动画
 66 //- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
 67 //{
 68 //    //创建核心动画
 69 //    CABasicAnimation * animation = [CABasicAnimation animation];
 70 //    
 71 //    //平移
 72 //    animation.keyPath = @"position";
 73 //
 74 //    //设置执行的动画
 75 //    animation.toValue = [NSValue valueWithCGPoint:CGPointMake(self.view.bounds.size.width - 20, self.view.bounds.size.height - 20)];
 76 //    
 77 //    //设置动画的时长
 78 //    animation.duration = 2.0f;
 79 //    
 80 //    //设置动画执行完毕之后不删除动画
 81 //    animation.removedOnCompletion = NO;
 82 //    
 83 //    //设置保存动画的最新状态
 84 //    animation.fillMode = kCAFillModeForwards;
 85 //    
 86 //    //设置动画的代理
 87 //    animation.delegate = self;
 88 //    
 89 //    //给控件添加核心动画
 90 //    [_view.layer addAnimation:animation forKey:nil];
 91 //}
 92 //#pragma mark 核心动画开始时调用的方法
 93 //- (void)animationDidStart:(CAAnimation *)anim
 94 //{
 95 //    NSLog(@"动画开始执行前的位置: %@",NSStringFromCGPoint(_view.center));
 96 //}
 97 //#pragma mark 核心动画结束时调用的方法
 98 //- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
 99 //{
100 //    NSLog(@"动画执行完毕后的位置: %@",NSStringFromCGPoint(_view.center));
101 //}
102 
103 
104 
105 #pragma mark UIView封装的首尾式动画
106 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
107 {
108     NSLog(@"动画执行之前的位置: %@",NSStringFromCGPoint(_view.center));
109     
110     //首尾式动画
111     //执行动画
112     [UIView beginAnimations:nil context:nil];
113     
114     //动画时间
115     [UIView setAnimationDuration:2.0f];
116     
117     //设置动画的代理
118     [UIView setAnimationDelegate:self];
119     
120     //设置动画执行完毕调用的事件
121     [UIView setAnimationDidStopSelector:@selector(didStopAnimation)];
122     
123     _view.center = CGPointMake(self.view.bounds.size.width - 20, self.view.bounds.size.height - 20);
124     
125     //动画结束
126     [UIView commitAnimations];
127 }
128 
129 #pragma mark 动画执行完毕调用的方法
130 - (void)didStopAnimation
131 {
132     NSLog(@"动画执行完毕");
133     
134     NSLog(@"动画执行之后的位置: %@",NSStringFromCGPoint(_view.center));
135 }
136 
137 @end