1 演示UIImage制作的卡通。本案例使UIImage制作一个小狗跑动的动画。

5 使用CoreAnimation制作动画

3.1 问题

UIView动画是UIKit提供特别造动画的API,其本质是指向CoreAnimation的包,使用UIView可以轻松方便之兑现动画,不需经过其他计算,本案例使UIView制作一个飞机运动的卡通片,如图-3所显示:

图片 1

图-3

3 使用UIView制作动画

6.4 完整代码

本案例中,TRRotationViewController.m文件中之整代码如下所示:

 

  1. #import “TRRotationViewController.h”
    1. @interface
      TRRotationViewController ()
  2. @property (weak, nonatomic) IBOutlet UIImageView *imageView;
    1. @end
    1. @implementation TRRotationViewController
      • (void)viewDidLoad
  3. {
  4. [super
    viewDidLoad];
  5. self.imageView.layer.cornerRadius = 8.0;
  6. self.imageView.layer.masksToBounds = YES;
  7. }
      • (IBAction)rotationX:(id)sender
  8. {
  9. //创建基本动画
  10. CABasicAnimation
    *transformAnimation = [CABasicAnimation
    animationWithKeyPath:@”transform”];
  11. transformAnimation.fromValue = [NSValue
    valueWithCATransform3D:self.imageView.layer.transform];
  12. //计算目标价
  13. transformAnimation.toValue = [NSValue
    valueWithCATransform3D:CATransform3DRotate(self.imageView.layer.transform, M_PI, 1.0, 0, 0)];
  14. transformAnimation.duration = 3.0;
  15. //将动画片长到imageView的layer上面
  16. [self.imageView.layer addAnimation:transformAnimation forKey:nil];
  17. }
    • (IBAction)rotationY:(id)sender
  18. {
  19. CABasicAnimation
    *transformAnimation = [CABasicAnimation
    animationWithKeyPath:@”transform”];
  20. transformAnimation.fromValue = [NSValue
    valueWithCATransform3D:self.imageView.layer.transform];
  21. transformAnimation.toValue = [NSValue
    valueWithCATransform3D:CATransform3DRotate(self.imageView.layer.transform, M_PI, 0.0, 1.0, 0)];
  22. transformAnimation.duration = 3.0;
  23. [self.imageView.layer addAnimation:transformAnimation forKey:nil];
  24. }
    • (IBAction)rotationZ:(id)sender
  25. {
  26. CABasicAnimation
    *transformAnimation = [CABasicAnimation
    animationWithKeyPath:@”transform”];
  27. transformAnimation.fromValue = [NSValue
    valueWithCATransform3D:self.imageView.layer.transform];
  28. transformAnimation.toValue = [NSValue
    valueWithCATransform3D:CATransform3DRotate(self.imageView.layer.transform, M_PI, 0.0, 0.0, 1.0)];
  29. transformAnimation.duration = 3.0;
  30. [self.imageView.layer addAnimation:transformAnimation forKey:nil];
  31. }
    • (IBAction)rotation:(id)sender
  32. {
  33. CABasicAnimation
    *transformAnimation = [CABasicAnimation
    animationWithKeyPath:@”transform”];
  34. transformAnimation.fromValue = [NSValue
    valueWithCATransform3D:self.imageView.layer.transform];
  35. transformAnimation.toValue = [NSValue
    valueWithCATransform3D:CATransform3DRotate(self.imageView.layer.transform, M_PI, 1.0, 1.0, 1.0)];
  36. transformAnimation.duration = 3.0;
  37. transformAnimation.delegate = self;
  38. [self.imageView.layer addAnimation:transformAnimation forKey:nil];
  39. }
      • (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
  40. {
  41. self.imageView.layer.transform = CATransform3DRotate(self.imageView.layer.transform, M_PI, 1.0, 1.0, 1.0);
  42. }
  43. @end 

4 CALayer的简单利用

3.2 方案

先是以创立好之Xcode项目的Storyboard中拖放一个ImageView控件和一个Label控件,在右边边栏的检查器中分头安装ImageView和Label的显示图片以及仿,ImageView显示飞机图片,Label显示文字“Welcome
To
iGame“,并将ImageView和Label关联成TRViewController的属性aircraft和welcomeLabel。

然后以Storyboard中拖放一个Button对象,设置标题为Start,并波及成TRViewController的计start:。

末段在viewDidLoad方法吃以UIView的动画片方法实现aircraft和welcomeLabel的入场动画,并于方式start:中使用UIView的动画方法实现飞机的飞动画。

4.3 步骤

贯彻此案例需要以如下步骤进行。

步骤一:搭建Storyboard界面

先是以创立好的Xcode项目的Storyboard中拖放一个ImageView控件,在右边边栏的检查器中设置ImageView的来得图片,并以ImageView和Label关联成TRViewController的性能imageView,代码如下所示:

  1. @interface TRViewController ()
  2. @property (weak, nonatomic) IBOutlet UIImageView *imageView;
  3. @end

步骤二:设置layer属性

率先在viewDidLoad方法吃设置self.view的layer的背景颜色及圆角,代码如下所示:

  1. – (void)viewDidLoad
  2. {
  3. [super
    viewDidLoad];
  4. //设置view的layer
  5.     CALayer *layer = self.view.layer;
  6. layer.backgroundColor = [[UIColor orangeColor] CGColor];
  7. layer.cornerRadius = 30.0;
  8. }

运转程序意识背景变成圆角的,如图-6所著:

图片 2

图-6

从再安装imageView的layer属性,将layer设置完毕圆角之后要用遮罩打开,代码如下所示:

 

  1. – (void)viewDidLoad
  2. {
  3. [super
    viewDidLoad];
  4. //设置view的layer
  5.     CALayer *layer = self.view.layer;
  6. layer.backgroundColor = [[UIColor orangeColor] CGColor];
  7. layer.cornerRadius = 30.0;
  8. //将imageView设置成圆角
  9. self.imageView.layer.cornerRadius = 10.0;
  10. //打开遮罩,否则无效
  11. self.imageView.layer.masksToBounds =YES;
  12. }

下一场在viewDidLoad方法吃让self.view.layer添加一个不论是图的子层,代码如下所示:

 

  1. – (void)viewDidLoad
  2. {
  3. [super
    viewDidLoad];
  4. //设置view的layer
  5.     CALayer *layer = self.view.layer;
  6. layer.backgroundColor = [[UIColor orangeColor] CGColor];
  7. layer.cornerRadius = 30.0;
  8. //将imageView设置成圆角
  9. self.imageView.layer.cornerRadius = 10.0;
  10. //打开遮罩,否则无效
  11. self.imageView.layer.masksToBounds =YES;
    1. //加子层
  12. CALayer *subLayer = [CALayer layer];
  13. subLayer.backgroundColor = [UIColor purpleColor].CGColor;
  14. subLayer.frame = CGRectMake(30, 200, 100, 120);
  15. //设置阴影
  16. subLayer.shadowColor = [UIColor greenColor].CGColor;
  17. subLayer.shadowOffset = CGSizeMake(2, 2);
  18. subLayer.shadowRadius = 5.0;
  19. subLayer.shadowOpacity = 0.8;
  20. //设置圆角
  21. subLayer.cornerRadius = 10.0;
  22. [layer addSublayer:subLayer];
  23. }

末尾在viewDidLoad方法被叫self.view.layer添加一个出图片的子层,代码如下所示:

 

  1. – (void)viewDidLoad
  2. {
  3. [super
    viewDidLoad];
  4. //设置view的layer
  5.     CALayer *layer = self.view.layer;
  6. layer.backgroundColor = [[UIColor orangeColor] CGColor];
  7. layer.cornerRadius = 30.0;
  8. //将imageView设置成圆角
  9. self.imageView.layer.cornerRadius = 10.0;
  10. //打开遮罩,否则无效
  11. self.imageView.layer.masksToBounds =YES;
  12. //加子层
  13. CALayer *subLayer = [CALayer layer];
  14. subLayer.backgroundColor = [UIColor purpleColor].CGColor;
  15. subLayer.frame = CGRectMake(30, 200, 100, 120);
  16. subLayer.shadowColor = [UIColor greenColor].CGColor;
  17. subLayer.shadowOffset = CGSizeMake(2, 2);
  18. subLayer.shadowRadius = 5.0;
  19. subLayer.shadowOpacity = 0.8;
  20. subLayer.cornerRadius = 10.0;
  21. [layer addSublayer:subLayer];
  22. //加起内容之子层
  23. CALayer *imageLayer = [CALayer new];
  24. imageLayer.frame = CGRectMake(180, 300, 100, 120);
  25. //设置层的内容
  26. imageLayer.contents = (id)[UIImage imageNamed:@”d.jpg”].CGImage;
  27. imageLayer.cornerRadius = 10.0;
  28. imageLayer.masksToBounds = YES;
  29. [layer addSublayer:imageLayer];
  30. }

5.1 问题

CoreAnimation是一个图纸渲染和动画片的底层框架,能够提供更多更强大的图纸渲染显示效果。本案例用CoreAnimation的要害帧动画艺术和基础动画方法制作动画,如图-7所展示:

图片 3

图-7

1.3 步骤

落实此案例需要按如下步骤进行。

步骤一:拖放ImageView控件

首先以开创好之Xcode项目的Storyboard中拖放一个ImageView控件,并涉嫌成TRViewController的性imageView,代码如下所示:

  1. @interface TRViewController ()
  2. @property (weak, nonatomic) IBOutlet UIImageView *imageView;
  3. @end

步骤二:使用UIImage生成动画

第一导入图片素材,图片的命名规则是按部就班梯次命名,即每张图片的称呼前半片同样后半片凡是序号,例如:0_0_run_00、0_0_run_01、0_0_run_02……

然后以viewDidLoad方法中采用工厂方法animatedImageNamed:创建UIImage对象image,这里要小心的凡imageNamed参数,传入的是图表名称不牵动序号的部分。

终极用imageView的image属性设置为刚刚缔造的image对象,代码如下所示:

 

  1. – (void)viewDidLoad
  2. {
  3. [super
    viewDidLoad];
  4. UIImage *image = [UIImage animatedImageNamed:@”0_0_run_” duration:2];
  5. self.imageView.image = image;
  6. }

1.2 方案

首先以开创好之Xcode项目的Storyboard中拖放一个ImageView控件,并涉嫌成TRViewController的习性imageView。

然后以viewDidLoad方法中行使工厂方法animatedImageNamed:创建UIImage对象image。

说到底将imageView的image属性设置也刚刚创设的image对象即可。

6.4 完整代码

该案例中,TRRotationViewController.m文件被的一体化代码如下所示:

 

  1. #import “TRRotationViewController.h”
    1. @interface TRRotationViewController ()
  2. @property (weak, nonatomic) IBOutlet UIImageView *imageView;
    1. @end
    1. @implementation TRRotationViewController
    1. – (void)viewDidLoad
  3. {
  4. [super
    viewDidLoad];
  5. self.imageView.layer.cornerRadius = 8.0;
  6. self.imageView.layer.masksToBounds = YES;
  7. }
    1. – (IBAction)rotationX:(id)sender
  8. {
  9. //创建基本动画
  10. CABasicAnimation *transformAnimation = [CABasicAnimation animationWithKeyPath:@”transform”];
  11. transformAnimation.fromValue = [NSValue valueWithCATransform3D:self.imageView.layer.transform];
  12. //计算目标价
  13. transformAnimation.toValue = [NSValue valueWithCATransform3D:CATransform3DRotate(self.imageView.layer.transform, M_PI, 1.0, 0, 0)];
  14. transformAnimation.duration = 3.0;
  15. //将动画长到imageView的layer上面
  16. [self.imageView.layer addAnimation:transformAnimation forKey:nil];
  17. }
  18. – (IBAction)rotationY:(id)sender
  19. {
  20. CABasicAnimation *transformAnimation = [CABasicAnimation animationWithKeyPath:@”transform”];
  21. transformAnimation.fromValue = [NSValue valueWithCATransform3D:self.imageView.layer.transform];
  22. transformAnimation.toValue = [NSValue valueWithCATransform3D:CATransform3DRotate(self.imageView.layer.transform, M_PI, 0.0, 1.0, 0)];
  23. transformAnimation.duration = 3.0;
  24. [self.imageView.layer addAnimation:transformAnimation forKey:nil];
  25. }
  26. – (IBAction)rotationZ:(id)sender
  27. {
  28. CABasicAnimation *transformAnimation = [CABasicAnimation animationWithKeyPath:@”transform”];
  29. transformAnimation.fromValue = [NSValue valueWithCATransform3D:self.imageView.layer.transform];
  30. transformAnimation.toValue = [NSValue valueWithCATransform3D:CATransform3DRotate(self.imageView.layer.transform, M_PI, 0.0, 0.0, 1.0)];
  31. transformAnimation.duration = 3.0;
  32. [self.imageView.layer addAnimation:transformAnimation forKey:nil];
  33. }
  34. – (IBAction)rotation:(id)sender
  35. {
  36. CABasicAnimation *transformAnimation = [CABasicAnimation animationWithKeyPath:@”transform”];
  37. transformAnimation.fromValue = [NSValue valueWithCATransform3D:self.imageView.layer.transform];
  38. transformAnimation.toValue = [NSValue valueWithCATransform3D:CATransform3DRotate(self.imageView.layer.transform, M_PI, 1.0, 1.0, 1.0)];
  39. transformAnimation.duration = 3.0;
  40. transformAnimation.delegate = self;
  41. [self.imageView.layer addAnimation:transformAnimation forKey:nil];
  42. }
    1. – (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
  43. {
  44. self.imageView.layer.transform = CATransform3DRotate(self.imageView.layer.transform, M_PI, 1.0, 1.0, 1.0);
  45. }
  46. @end

4.1 问题

任何UIView和子类对象还有一个特性为layer,此属性就是UIView的CoreAnimation层,类型是CALayer,本案例演示CALayer如何使用,如图-5所出示:

图片 4

图-5

3.2 方案

率先以创建好的Xcode项目的Storyboard中拖放一个ImageView控件和一个Label控件,在右边栏的检查器中分头设置ImageView和Label的亮图片及文字,ImageView显示飞机图片,Label显示文字“Welcome
To
iGame“,并拿ImageView和Label关联成TRViewController的特性aircraft和welcomeLabel。

下一场在Storyboard中拖放一个Button对象,设置标题为Start,并涉嫌成TRViewController的方式start:。

最终以viewDidLoad方法中以UIView的动画方法实现aircraft和welcomeLabel的入场动画,并以章程start:中使用UIView的动画片方法实现飞机的宇航动画。

1.3 步骤

贯彻此案例需要以如下步骤进行。

步骤一:拖放ImageView控件

率先以创立好的Xcode项目的Storyboard中拖放一个ImageView控件,并提到成TRViewController的性能imageView,代码如下所示:

  1. @interface TRViewController ()
  2. @property (weak, nonatomic) IBOutlet UIImageView *imageView;
  3. @end

手续二:使用UIImage生成动画

先是导入图片素材,图片的命名规则是按梯次命名,即每张图片的号前半组成部分同样后半部分凡是序号,例如:0_0_run_00、0_0_run_01、0_0_run_02……

然后在viewDidLoad方法吃采取工厂方法animatedImageNamed:创建UIImage对象image,这里用留意的是imageNamed参数,传入的凡图片名称不带序号的有的。

末了以imageView的image属性设置为刚开创的image对象,代码如下所示:

 

    • (void)viewDidLoad
  1. {
  2. [super
    viewDidLoad];
  3. UIImage *image = [UIImage animatedImageNamed:@”0_0_run_” duration:2];
  4. self.imageView.image
    = image;
  5. }

1.4 完整代码

该案例中,TRViewController.m文件中之整代码如下所示:

 

  1. #import “TRViewController.h”
    1. @interface TRViewController ()
  2. @property (weak, nonatomic) IBOutlet UIImageView *imageView;
  3. @end
    1. @implementation TRViewController
  4. – (void)viewDidLoad
  5. {
  6. [super
    viewDidLoad];
  7. UIImage *image = [UIImage animatedImageNamed:@”0_0_run_” duration:2];
  8. self.imageView.image = image;
  9. }
  10. @end 

2.2 方案

先是在创建好的Xcode项目之Storyboard中拖放一个同屏幕一样大小的ImageView控件,并拿ImageView设置也TRViewController的习性imageView。

下一场在viewDidLoad方法吃创造一个计时器,每隔1/30秒重复调用方法changeAlpha:。

末尾实现方式changeAlpha:,每次调用都转移imageView的alpha值。

4.1 问题

任何UIView及子类对象都产生一个性让layer,此属性就是UIView的CoreAnimation层,类型是CALayer,本案例演示CALayer如何使用,如图-5所出示:

图片 5

图-5

3.4 完整代码

此案例中,TRViewController.m文件中之总体代码如下所示:

 

  1. #import “TRViewController.h”
    1. @interface
      TRViewController ()
  2. @property (weak, nonatomic) IBOutlet UILabel *welcomeLabel;
  3. @property (weak, nonatomic) IBOutlet UIImageView *aircraft;
  4. @end
    1. @implementation TRViewController
    • (void)viewDidAppear:(BOOL)animated
  5. {
  6. [super
    viewDidAppear:animated];
  7. //结束位置
  8.     CGRect
    endFrame = self.welcomeLabel.frame;
  9. //开始位置
  10. CGRect startFrame
    = endFrame;
  11. startFrame.origin.x
    = – startFrame.size.width;
  12. //welcome的入场动画
  13. self.welcomeLabel.frame = startFrame;
  14. self.welcomeLabel.alpha = 0.1;
  15. [UIView animateWithDuration:5.0 delay:0.3 usingSpringWithDamping:0.1
    initialSpringVelocity:5 options:UIViewAnimationOptionCurveEaseInOut animations:^{
  16. self.welcomeLabel.frame = endFrame;
  17. self.welcomeLabel.alpha = 1.0;
  18. } completion:^(BOOL finished) {
  19. NSLog(@”动画结束”);
  20. }];
  21. //飞机的入场动画
  22. endFrame = self.aircraft.frame;
  23. startFrame = endFrame;
  24. startFrame.origin.y
    = self.view.bounds.size.height;
  25. self.aircraft.frame
    = startFrame;
  26. [UIView animateWithDuration:2.0 animations:^{
  27. self.aircraft.frame
    = endFrame;
  28. }];
  29. }
      • (IBAction)start:(UIButton *)sender
  30. {
  31. CGPoint point
    = self.aircraft.center;
  32. point.y = 80;
  33. [UIView animateWithDuration:3.0 delay:1.0 options:UIViewAnimationOptionCurveEaseInOut|UIViewAnimationOptionRepeat|UIViewAnimationOptionAutoreverse animations:^{
  34. self.aircraft.center
    = point;
  35. } completion:^(BOOL finished) {
  36. NSLog(@”动画结束”);
  37. }];
  38. }
  39. @end 

6.1 问题

CATransform3D是一个结构体,是一个4×4的矩阵,用于描述一个3D图纸的变形,包括旋转、缩放以及活动,本案例用CATransform3D制作3D旋转动画,如图-8所著:

图片 6

图-8

1.4 完整代码

本案例中,TRViewController.m文件被的整代码如下所示:

 

  1. #import “TRViewController.h”
    1. @interface
      TRViewController ()
  2. @property (weak, nonatomic) IBOutlet UIImageView *imageView;
  3. @end
    1. @implementation TRViewController
    • (void)viewDidLoad
  4. {
  5. [super
    viewDidLoad];
  6. UIImage *image = [UIImage animatedImageNamed:@”0_0_run_” duration:2];
  7. self.imageView.image
    = image;
  8. }
  9. @end 

4.2 方案

先是以创建好的Xcode项目的Storyboard中拖放一个ImageView控件,在右边边栏的检查器中设置ImageView的显示图片,并拿ImageView和Label关联成TRViewController的特性imageView。

接下来于viewDidLoad方法被设置self.view的layer的背景颜色及圆角。再安装imageView的layer属性,将layer设置完毕圆角之后要用遮罩打开。

末段在viewDidLoad方法吃分头被self.view.layer添加一个不管图的子层和发生图表的子层。

4 CALayer的简要利用

1.2 方案

首先在开立好的Xcode项目之Storyboard中拖放一个ImageView控件,并涉嫌成TRViewController的性能imageView。

然后以viewDidLoad方法吃使工厂方法animatedImageNamed:创建UIImage对象image。

末将imageView的image属性设置也才创办的image对象即可。

4.3 步骤

贯彻此案例需要以如下步骤进行。

步骤一:搭建Storyboard界面

首先在开创好之Xcode项目之Storyboard中拖放一个ImageView控件,在右手边栏的检查器中安ImageView的亮图片,并以ImageView和Label关联成TRViewController的性质imageView,代码如下所示:

  1. @interface TRViewController ()
  2. @property (weak, nonatomic) IBOutlet UIImageView *imageView;
  3. @end

步骤二:设置layer属性

第一在viewDidLoad方法吃安self.view的layer的背景颜色和圆角,代码如下所示:

    • (void)viewDidLoad
  1. {
  2. [super
    viewDidLoad];
  3. //设置view的layer
  4.     CALayer *layer = self.view.layer;
  5. layer.backgroundColor = [[UIColor orangeColor] CGColor];
  6. layer.cornerRadius =
    30.0;
  7. }

运作程序意识背景变成圆角的,如图-6所出示:

图片 7

图-6

说不上再装imageView的layer属性,将layer设置完毕圆角之后如果拿遮罩打开,代码如下所示:

 

    • (void)viewDidLoad
  1. {
  2. [super
    viewDidLoad];
  3. //设置view的layer
  4.     CALayer *layer = self.view.layer;
  5. layer.backgroundColor = [[UIColor orangeColor] CGColor];
  6. layer.cornerRadius =
    30.0;
  7. //将imageView设置成圆角
  8. self.imageView.layer.cornerRadius = 10.0;
  9. //打开遮罩,否则无效
  10. self.imageView.layer.masksToBounds =YES;
  11. }

然后以viewDidLoad方法吃为self.view.layer添加一个无论图的子层,代码如下所示:

 

    • (void)viewDidLoad
  1. {
  2. [super
    viewDidLoad];
  3. //设置view的layer
  4.     CALayer *layer = self.view.layer;
  5. layer.backgroundColor = [[UIColor orangeColor] CGColor];
  6. layer.cornerRadius =
    30.0;
  7. //将imageView设置成圆角
  8. self.imageView.layer.cornerRadius = 10.0;
  9. //打开遮罩,否则无效
  10. self.imageView.layer.masksToBounds =YES;
    1. //加子层
  11. CALayer *subLayer = [CALayer layer];
  12. subLayer.backgroundColor = [UIColor purpleColor].CGColor;
  13. subLayer.frame =
    CGRectMake(30, 200, 100, 120);
  14. //设置阴影
  15. subLayer.shadowColor = [UIColor greenColor].CGColor;
  16. subLayer.shadowOffset = CGSizeMake(2, 2);
  17. subLayer.shadowRadius = 5.0;
  18. subLayer.shadowOpacity = 0.8;
  19. //设置圆角
  20. subLayer.cornerRadius = 10.0;
  21. [layer addSublayer:subLayer];
  22. }

末了在viewDidLoad方法被让self.view.layer添加一个产生图片的子层,代码如下所示:

 

    • (void)viewDidLoad
  1. {
  2. [super
    viewDidLoad];
  3. //设置view的layer
  4.     CALayer *layer = self.view.layer;
  5. layer.backgroundColor = [[UIColor orangeColor] CGColor];
  6. layer.cornerRadius =
    30.0;
  7. //将imageView设置成圆角
  8. self.imageView.layer.cornerRadius = 10.0;
  9. //打开遮罩,否则无效
  10. self.imageView.layer.masksToBounds =YES;
  11. //加子层
  12. CALayer *subLayer = [CALayer layer];
  13. subLayer.backgroundColor = [UIColor purpleColor].CGColor;
  14. subLayer.frame =
    CGRectMake(30, 200, 100, 120);
  15. subLayer.shadowColor = [UIColor greenColor].CGColor;
  16. subLayer.shadowOffset = CGSizeMake(2, 2);
  17. subLayer.shadowRadius = 5.0;
  18. subLayer.shadowOpacity = 0.8;
  19. subLayer.cornerRadius = 10.0;
  20. [layer addSublayer:subLayer];
  21. //加发情之子层
  22. CALayer *imageLayer = [CALayer new];
  23. imageLayer.frame =
    CGRectMake(180, 300, 100, 120);
  24. //设置层的内容
  25. imageLayer.contents = (id)[UIImage imageNamed:@”d.jpg”].CGImage;
  26. imageLayer.cornerRadius = 10.0;
  27. imageLayer.masksToBounds = YES;
  28. [layer addSublayer:imageLayer];
  29. }

1.1 问题

UIImage动画是IOS提供的极中心的卡通片,通常用于制作有袖珍的动画片,本案例使UIImage制作一个小狗跑动的卡通,如图-1所著:

图片 8

图-1

6 使用CATransform3D制作3D动画

2.4 完整代码

本案例中,TRViewController.m文件被的整代码如下所示:

 

  1. #import “TRViewController.h”
    1. @interface TRViewController ()
  2. @property (weak, nonatomic) IBOutlet UIImageView *imageView;
  3. @end
    1. @implementation TRViewController
  4. #define FPS 30.0 //帧率
  5. #define DURATION 5.0 //动画时长
  6. – (void)viewDidLoad
  7. {
  8. [super
    viewDidLoad];
  9.     [NSTimer scheduledTimerWithTimeInterval:1/FPS target:self selector:@selector(changeAlpha:)
    userInfo:nil repeats:YES];
  10. }
  11. //当前值=开始值+当前的帧数*(结束值-开始值)/(帧率*时长)
  12. – (void)changeAlpha:(NSTimer *)timer
  13. {
  14. static NSUInteger count = 0;
  15. count++;
  16. self.imageView.alpha = count * 1.0/(FPS * DURATION);
  17. if (count >= FPS * DURATION) {
  18. [timer invalidate];
  19. }
  20. }
  21. @end 

2.4 完整代码

该案例中,TRViewController.m文件中之一体化代码如下所示:

 

  1. #import “TRViewController.h”
    1. @interface
      TRViewController ()
  2. @property (weak, nonatomic) IBOutlet UIImageView *imageView;
  3. @end
    1. @implementation TRViewController
  4. #define FPS 30.0 //帧率
  5. #define DURATION 5.0 //动画时长
    • (void)viewDidLoad
  6. {
  7. [super
    viewDidLoad];
  8.     [NSTimer scheduledTimerWithTimeInterval:1/FPS target:self selector:@selector(changeAlpha:)
    userInfo:nil repeats:YES];
  9. }
  10. //当前值=开始值+当前底帧数*(结束值-开始值)/(帧率*时长)
    • (void)changeAlpha:(NSTimer *)timer
  11. {
  12. static NSUInteger count = 0;
  13. count++;
  14. self.imageView.alpha
    = count * 1.0/(FPS * DURATION);
  15. if (count >= FPS * DURATION) {
  16. [timer invalidate];
  17. }
  18. }
  19. @end 

3.3 步骤

心想事成此案例需要依照如下步骤进行。

步骤同:搭建界面

率先以开立好的Xcode项目的Storyboard中拖放一个ImageView控件和一个Label控件,在右侧边栏的检查器中分头安装ImageView和Label的亮图片与仿,ImageView显示飞机图片,Label显示文字“Welcome
To iGame“。

下将ImageView和Label关联成TRViewController的属性aircraft和welcomeLabel,代码如下所示:

  1. @interface TRViewController ()
  2. @property (weak, nonatomic) IBOutlet UILabel *welcomeLabel;
  3. @property (weak, nonatomic) IBOutlet UIImageView *aircraft;
  4. @end

然后以Storyboard中拖放一个Button对象,设置标题为Start,并波及成TRViewController的法子start:。

末Storyboard中成功的界面如图-4所出示:

图片 9

图-4

步骤二:使用UIView实现动画

先是以viewDidLoad方法被以UIView的动画片方法实现welcomeLabel的入场动画,welcomeLabel从屏幕的左边进入屏幕,使用UIView的动画方法animateWithDuration:
delay: usingSpringWithDamping: initialSpringVelocity:
options:增加弹簧效果,代码如下所示:

 

  1. – (void)viewDidAppear:(BOOL)animated
  2. {
  3. [super
    viewDidAppear:animated];
  4. //结束位置
  5.     CGRect endFrame = self.welcomeLabel.frame;
  6. //开始位置
  7. CGRect startFrame =
    endFrame;
  8. startFrame.origin.x = – startFrame.size.width;
  9. //welcome的入场动画
  10. self.welcomeLabel.frame = startFrame;
  11. self.welcomeLabel.alpha = 0.1;
  12. [UIView animateWithDuration:5.0 delay:0.3 usingSpringWithDamping:0.1
    initialSpringVelocity:5 options:UIViewAnimationOptionCurveEaseInOut animations:^{
  13. self.welcomeLabel.frame = endFrame;
  14. self.welcomeLabel.alpha = 1.0;
  15. } completion:^(BOOL finished) {
  16. NSLog(@”动画结束”);
  17. }];
  18. }

然后实现飞机的入场动画,飞机由屏幕的花花世界飞入屏幕,代码如下所示:

 

  1. – (void)viewDidAppear:(BOOL)animated
  2. {
  3. [super
    viewDidAppear:animated];
  4. //结束位置
  5.     CGRect endFrame = self.welcomeLabel.frame;
  6. //开始位置
  7. CGRect startFrame =
    endFrame;
  8. startFrame.origin.x = – startFrame.size.width;
  9. //welcome的入场动画
  10. self.welcomeLabel.frame = startFrame;
  11. self.welcomeLabel.alpha = 0.1;
  12. [UIView animateWithDuration:5.0 delay:0.3 usingSpringWithDamping:0.1
    initialSpringVelocity:5 options:UIViewAnimationOptionCurveEaseInOut animations:^{
  13. self.welcomeLabel.frame = endFrame;
  14. self.welcomeLabel.alpha = 1.0;
  15. } completion:^(BOOL finished) {
  16. NSLog(@”动画结束”);
  17. }];
  18. //飞机的入场动画
  19. endFrame = self.aircraft.frame;
  20. startFrame = endFrame;
  21. startFrame.origin.y = self.view.bounds.size.height;
  22. self.aircraft.frame = startFrame;
  23. [UIView animateWithDuration:2.0 animations:^{
  24. self.aircraft.frame = endFrame;
  25. }];
  26. }

末实现方式start:完成飞机的飞动画,飞机于屏幕下方飞到屏幕上,并且以动画结束后往往在屏幕被航空,代码如下所示:

 

  1. – (IBAction)start:(UIButton *)sender
  2. {
  3. CGPoint point = self.aircraft.center;
  4. point.y = 80;
  5. [UIView animateWithDuration:3.0 delay:1.0 options:UIViewAnimationOptionCurveEaseInOut|UIViewAnimationOptionRepeat|UIViewAnimationOptionAutoreverse animations:^{
  6. self.aircraft.center = point;
  7. } completion:^(BOOL finished) {
  8. NSLog(@”动画结束”);
  9. }];
  10. }

5.2 方案

第一在创立好之Xcode项目之Storyboard中拖放一个ImageView控件和一个Button控件,在右边边栏的检查器中装置ImageView和Button的特性,并将ImageView关联成TRAnimationViewController的属性imageView,将Button关联成TRAnimationViewController的计start:。

然后以viewDidLoad方法吃设置imageView的layer属性,将imageView设置成圆角。

说到底实现start:方法,当点击按钮imageView开始推行动画。首先制定一个imageView的卡通路径path,是一个UIBezierPath类型,然后分别创建主要帧动画、缩放动画与透明度改变动画,最后用以上动画放上一个动画群组里面,即CAAnimationGroup类型的group,并以动画片长到imageView的layer中。

1 演示UIImage制作的动画片

6.1 问题

CATransform3D凡一个结构体,是一个4×4底矩阵,用于描述一个3D图纸的变形,包括旋转、缩放以及运动,本案例以CATransform3D制作3D旋转动画,如图-8所著:

图片 10

图-8

2.2 方案

首先在开立好之Xcode项目之Storyboard中拖放一个暨屏幕一样大小的ImageView控件,并拿ImageView设置也TRViewController的习性imageView。

下一场在viewDidLoad方法吃创造一个计时器,每隔1/30秒重复调用方法changeAlpha:。

末尾实现方式changeAlpha:,每次调用都转移imageView的alpha值。

3 使用UIView制作动画

2 使用NSTimer做一个图纸淡入的效力

2.1 问题

NSTimer是一个计时器类,用于定时向指定对象发送信息,本案例使NSTimer制作一个图淡入的效益,即各级隔得之时光变更图片的alpha值,如图-2所出示:

图片 11

图-2

5.4 完整代码

本案例中,TRAnimationViewController.m文件中之整代码如下所示:

 

  1. #import “TRAnimationViewController.h”
    1. @interface TRAnimationViewController ()
  2. @property (weak, nonatomic) IBOutlet UIImageView *imageView;
  3. @end
    1. @implementation TRAnimationViewController
  4. – (void)viewDidLoad
  5. {
  6. [super
    viewDidLoad];
  7. //设置imageView的layer属性
  8.     self.imageView.layer.cornerRadius = 8.0;
  9. self.imageView.layer.masksToBounds = YES;
  10. }
  11. //创建图片运动的曲线
  12. – (void)createCurve:(UIBezierPath *)path
  13. {
  14. [path moveToPoint:self.imageView.center];
  15. CGPoint targetPoint = CGPointMake(self.view.bounds.size.width – self.imageView.frame.size.width – 20, self.view.bounds.size.height – self.imageView.frame.size.height – 20);
  16. CGPoint control1 = CGPointMake(self.view.bounds.size.width – self.imageView.frame.size.width – 20, self.imageView.frame.origin.y);
  17. CGPoint control2 = CGPointMake(self.imageView.frame.origin.x, self.view.bounds.size.height – self.imageView.frame.size.height – 20);
  18. [path addCurveToPoint:targetPoint controlPoint1:control1 controlPoint2:control2];
  19. }
  20. – (IBAction)start:(id)sender
  21. {
  22. UIBezierPath *path = [UIBezierPath bezierPath];
  23. [self createCurve:path];
  24. //创建主要帧
  25. CAKeyframeAnimation *moveAnimation = [CAKeyframeAnimation animationWithKeyPath:@”position”];
  26. //设置相关属性
  27. moveAnimation.path =
    path.CGPath;
  28. moveAnimation.removedOnCompletion = YES;
    1. //创建缩放动画
  29. CABasicAnimation *scaleAnimation = [CABasicAnimation animationWithKeyPath:@”transform”];
  30. scaleAnimation.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];
  31. scaleAnimation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)];
  32. scaleAnimation.removedOnCompletion = YES;
    1. //创建透明度动画
  33. CABasicAnimation *alphaAnimation = [CABasicAnimation animationWithKeyPath:@”opacity”];
  34. alphaAnimation.fromValue = @1.0;
  35. alphaAnimation.toValue = @0.0;
  36. alphaAnimation.removedOnCompletion = YES;
    1. //将上述动画放上一个动画组
  37. CAAnimationGroup *group = [CAAnimationGroup animation];
  38. group.animations =
    @[moveAnimation,
    scaleAnimation, alphaAnimation];
  39. group.duration = 2.0;
  40. group.delegate =
    self;
  41. //加入到Layer中
  42. [self.imageView.layer addAnimation:group forKey:nil];
  43. }
    1. – (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
  44. {
  45. [self.imageView removeFromSuperview];
  46. }
  47. @end

5.4 完整代码

本案例中,TRAnimationViewController.m文件被的整代码如下所示:

 

  1. #import “TRAnimationViewController.h”
    1. @interface
      TRAnimationViewController ()
  2. @property (weak, nonatomic) IBOutlet UIImageView *imageView;
  3. @end
    1. @implementation TRAnimationViewController
    • (void)viewDidLoad
  4. {
  5. [super
    viewDidLoad];
  6. //设置imageView的layer属性
  7.     self.imageView.layer.cornerRadius = 8.0;
  8. self.imageView.layer.masksToBounds = YES;
  9. }
  10. //创建图片运动的曲线
    • (void)createCurve:(UIBezierPath *)path
  11. {
  12. [path moveToPoint:self.imageView.center];
  13. CGPoint
    targetPoint = CGPointMake(self.view.bounds.size.width – self.imageView.frame.size.width – 20, self.view.bounds.size.height – self.imageView.frame.size.height – 20);
  14. CGPoint control1
    = CGPointMake(self.view.bounds.size.width – self.imageView.frame.size.width – 20, self.imageView.frame.origin.y);
  15. CGPoint control2
    = CGPointMake(self.imageView.frame.origin.x, self.view.bounds.size.height – self.imageView.frame.size.height – 20);
  16. [path addCurveToPoint:targetPoint
    controlPoint1:control1
    controlPoint2:control2];
  17. }
    • (IBAction)start:(id)sender
  18. {
  19. UIBezierPath *path = [UIBezierPath bezierPath];
  20. [self createCurve:path];
  21. //创建关键帧
  22. CAKeyframeAnimation *moveAnimation = [CAKeyframeAnimation
    animationWithKeyPath:@”position”];
  23. //设置相关属性
  24. moveAnimation.path =
    path.CGPath;
  25. moveAnimation.removedOnCompletion = YES;
    1. //创建缩放动画
  26. CABasicAnimation
    *scaleAnimation =
    [CABasicAnimation
    animationWithKeyPath:@”transform”];
  27. scaleAnimation.fromValue = [NSValue
    valueWithCATransform3D:CATransform3DIdentity];
  28. scaleAnimation.toValue = [NSValue
    valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)];
  29. scaleAnimation.removedOnCompletion = YES;
    1. //创建透明度动画
  30. CABasicAnimation
    *alphaAnimation =
    [CABasicAnimation
    animationWithKeyPath:@”opacity”];
  31. alphaAnimation.fromValue = @1.0;
  32. alphaAnimation.toValue = @0.0;
  33. alphaAnimation.removedOnCompletion = YES;
    1. //将以上动画放上一个动画组
  34. CAAnimationGroup
    *group = [CAAnimationGroup animation];
  35. group.animations =
    @[moveAnimation,
    scaleAnimation, alphaAnimation];
  36. group.duration =
    2.0;
  37. group.delegate =
    self;
  38. //加入到Layer中
  39. [self.imageView.layer addAnimation:group forKey:nil];
  40. }
      • (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
  41. {
  42. [self.imageView
    removeFromSuperview];
  43. }
  44. @end

5.1 问题

CoreAnimation是一个图纸渲染和动画片的底框架,能够提供更多更强劲的图形渲染显示力量。本案例使CoreAnimation的最主要帧动画艺术以及基础动画方法制作动画,如图-7所展示:

图片 12

图-7

4.2 方案

先是以开创好之Xcode项目的Storyboard中拖放一个ImageView控件,在右边边栏的检查器中装置ImageView的显示图片,并以ImageView和Label关联成TRViewController的习性imageView。

下一场在viewDidLoad方法吃设置self.view的layer的背景颜色跟圆角。再装imageView的layer属性,将layer设置结束圆角之后如果以遮罩打开。

末以viewDidLoad方法中分头于self.view.layer添加一个管图的子层和发生图片的子层。

5.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:搭建Storyboard界面

率先以开立好之Xcode项目的Storyboard中拖放一个ImageView控件和一个Button控件,在右侧边栏的检查器中安装ImageView和Button的性质,并拿ImageView关联成TRAnimationViewController的习性imageView,将Button关联成TRAnimationViewController的方式start:,代码如下所示:

 

  1. @interface TRAnimationViewController ()
  2. @property (weak, nonatomic) IBOutlet UIImageView *imageView;
  3. @end
  4. – (IBAction)start:(id)sender
  5. {
  6. }

手续二:实现imageView的移动动画

第一在viewDidLoad方法吃设置imageView的layer属性,将imageView设置成圆角,代码如下所示:

 

  1. – (void)viewDidLoad
  2. {
  3. [super
    viewDidLoad];
  4. //设置imageView的layer属性
  5.     self.imageView.layer.cornerRadius = 8.0;
  6. self.imageView.layer.masksToBounds = YES;
  7. }

下一场实现start:方法,当点击按钮imageView开始实施动画。首先制定一个imageView的动画片路径path,是一个UIBezierPath类型,代码如下所示:

  1. – (IBAction)start:(id)sender
  2. {
  3. UIBezierPath *path = [UIBezierPath bezierPath];
  4. [self createCurve:path];
  5. }
    1. – (IBAction)start:(id)sender
  6. {
  7. UIBezierPath *path = [UIBezierPath bezierPath];
  8. [self createCurve:path];
  9. //创建主要帧
  10. CAKeyframeAnimation *moveAnimation = [CAKeyframeAnimation animationWithKeyPath:@”position”];
  11. //设置相关属性
  12. moveAnimation.path =
    path.CGPath;
  13. moveAnimation.removedOnCompletion = YES;
  14. }

接下来创建主要帧动画,并安装相关属性,代码如下所示:

  1. – (IBAction)start:(id)sender
  2. {
  3. UIBezierPath *path = [UIBezierPath bezierPath];
  4. [self createCurve:path];
  5. //创建主要帧
  6. CAKeyframeAnimation *moveAnimation = [CAKeyframeAnimation animationWithKeyPath:@”position”];
  7. //设置相关属性
  8. moveAnimation.path =
    path.CGPath;
  9. moveAnimation.removedOnCompletion = YES;
  10. }

重新创缩放动画与透明度改变动画,代码如下所示:

 

  1. – (IBAction)start:(id)sender
  2. {
  3. UIBezierPath *path = [UIBezierPath bezierPath];
  4. [self createCurve:path];
  5. //创建主要帧
  6. CAKeyframeAnimation *moveAnimation = [CAKeyframeAnimation animationWithKeyPath:@”position”];
  7. //设置相关属性
  8. moveAnimation.path =
    path.CGPath;
  9. moveAnimation.removedOnCompletion = YES;
  10. //创建缩放动画
  11. CABasicAnimation *scaleAnimation = [CABasicAnimation animationWithKeyPath:@”transform”];
  12. scaleAnimation.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];
  13. scaleAnimation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)];
  14. scaleAnimation.removedOnCompletion = YES;
    1. //创建透明度动画
  15. CABasicAnimation *alphaAnimation = [CABasicAnimation animationWithKeyPath:@”opacity”];
  16. alphaAnimation.fromValue = @1.0;
  17. alphaAnimation.toValue = @0.0;
  18. alphaAnimation.removedOnCompletion = YES;
  19. }

说到底以上述动画放上一个卡通群组里面,即CAAnimationGroup类型的group,并将动画长到imageView的layer中,代码如下所示:

 

  1. – (IBAction)start:(id)sender
  2. {
  3. UIBezierPath *path = [UIBezierPath bezierPath];
  4. [self createCurve:path];
  5. //创建关键帧
  6. CAKeyframeAnimation *moveAnimation = [CAKeyframeAnimation animationWithKeyPath:@”position”];
  7. //设置相关属性
  8. moveAnimation.path =
    path.CGPath;
  9. moveAnimation.removedOnCompletion = YES;
    1. //创建缩放动画
  10. CABasicAnimation *scaleAnimation = [CABasicAnimation animationWithKeyPath:@”transform”];
  11. scaleAnimation.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];
  12. scaleAnimation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)];
  13. scaleAnimation.removedOnCompletion = YES;
    1. //创建透明度动画
  14. CABasicAnimation *alphaAnimation = [CABasicAnimation animationWithKeyPath:@”opacity”];
  15. alphaAnimation.fromValue = @1.0;
  16. alphaAnimation.toValue = @0.0;
  17. alphaAnimation.removedOnCompletion = YES;
    1. //将上述动画放上一个动画组
  18. CAAnimationGroup *group = [CAAnimationGroup animation];
  19. group.animations =
    @[moveAnimation,
    scaleAnimation, alphaAnimation];
  20. group.duration = 2.0;
  21. group.delegate =
    self;
  22. //加入到Layer中
  23. [self.imageView.layer addAnimation:group forKey:nil];
  24. }

心想事成animation的生命周期方法,当动画结束时拿imageView从界面及移除,代码如下所示:

 

  1. – (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
  2. {
  3. [self.imageView removeFromSuperview];
  4. }

2 使用NSTimer做一个图淡入的职能

3.4 完整代码

本案例中,TRViewController.m文件中之整代码如下所示:

 

  1. #import “TRViewController.h”
    1. @interface TRViewController ()
  2. @property (weak, nonatomic) IBOutlet UILabel *welcomeLabel;
  3. @property (weak, nonatomic) IBOutlet UIImageView *aircraft;
  4. @end
    1. @implementation TRViewController
  5. – (void)viewDidAppear:(BOOL)animated
  6. {
  7. [super
    viewDidAppear:animated];
  8. //结束位置
  9.     CGRect endFrame = self.welcomeLabel.frame;
  10. //开始位置
  11. CGRect startFrame =
    endFrame;
  12. startFrame.origin.x = – startFrame.size.width;
  13. //welcome的入场动画
  14. self.welcomeLabel.frame = startFrame;
  15. self.welcomeLabel.alpha = 0.1;
  16. [UIView animateWithDuration:5.0 delay:0.3 usingSpringWithDamping:0.1
    initialSpringVelocity:5 options:UIViewAnimationOptionCurveEaseInOut animations:^{
  17. self.welcomeLabel.frame = endFrame;
  18. self.welcomeLabel.alpha = 1.0;
  19. } completion:^(BOOL finished) {
  20. NSLog(@”动画结束”);
  21. }];
  22. //飞机的入场动画
  23. endFrame = self.aircraft.frame;
  24. startFrame = endFrame;
  25. startFrame.origin.y = self.view.bounds.size.height;
  26. self.aircraft.frame = startFrame;
  27. [UIView animateWithDuration:2.0 animations:^{
  28. self.aircraft.frame = endFrame;
  29. }];
  30. }
    1. – (IBAction)start:(UIButton *)sender
  31. {
  32. CGPoint point = self.aircraft.center;
  33. point.y = 80;
  34. [UIView animateWithDuration:3.0 delay:1.0 options:UIViewAnimationOptionCurveEaseInOut|UIViewAnimationOptionRepeat|UIViewAnimationOptionAutoreverse animations:^{
  35. self.aircraft.center = point;
  36. } completion:^(BOOL finished) {
  37. NSLog(@”动画结束”);
  38. }];
  39. }
  40. @end 

5.3 步骤

贯彻此案例需要以如下步骤进行。

步骤一:搭建Storyboard界面

第一在开创好的Xcode项目之Storyboard中拖放一个ImageView控件和一个Button控件,在右边栏的检查器中装置ImageView和Button的性能,并拿ImageView关联成TRAnimationViewController的性imageView,将Button关联成TRAnimationViewController的措施start:,代码如下所示:

 

  1. @interface TRAnimationViewController ()
  2. @property (weak, nonatomic) IBOutlet UIImageView *imageView;
  3. @end
    • (IBAction)start:(id)sender
  4. {
  5. }

手续二:实现imageView的活动动画

先是以viewDidLoad方法吃安装imageView的layer属性,将imageView设置成圆角,代码如下所示:

 

    • (void)viewDidLoad
  1. {
  2. [super
    viewDidLoad];
  3. //设置imageView的layer属性
  4.     self.imageView.layer.cornerRadius = 8.0;
  5. self.imageView.layer.masksToBounds = YES;
  6. }

接下来实现start:方法,当点击按钮imageView开始实践动画。首先制定一个imageView的卡通路径path,是一个UIBezierPath类型,代码如下所示:

    • (IBAction)start:(id)sender
  1. {
  2. UIBezierPath *path = [UIBezierPath bezierPath];
  3. [self createCurve:path];
  4. }
      • (IBAction)start:(id)sender
  5. {
  6. UIBezierPath *path = [UIBezierPath bezierPath];
  7. [self createCurve:path];
  8. //创建关键帧
  9. CAKeyframeAnimation *moveAnimation = [CAKeyframeAnimation
    animationWithKeyPath:@”position”];
  10. //设置相关属性
  11. moveAnimation.path =
    path.CGPath;
  12. moveAnimation.removedOnCompletion = YES;
  13. }

接下来创建关键帧动画,并安装相关属性,代码如下所示:

    • (IBAction)start:(id)sender
  1. {
  2. UIBezierPath *path = [UIBezierPath bezierPath];
  3. [self createCurve:path];
  4. //创建关键帧
  5. CAKeyframeAnimation *moveAnimation = [CAKeyframeAnimation
    animationWithKeyPath:@”position”];
  6. //设置相关属性
  7. moveAnimation.path =
    path.CGPath;
  8. moveAnimation.removedOnCompletion = YES;
  9. }

复创缩放动画与透明度改变动画,代码如下所示:

 

    • (IBAction)start:(id)sender
  1. {
  2. UIBezierPath *path = [UIBezierPath bezierPath];
  3. [self createCurve:path];
  4. //创建关键帧
  5. CAKeyframeAnimation *moveAnimation = [CAKeyframeAnimation
    animationWithKeyPath:@”position”];
  6. //设置相关属性
  7. moveAnimation.path =
    path.CGPath;
  8. moveAnimation.removedOnCompletion = YES;
  9. //创建缩放动画
  10. CABasicAnimation
    *scaleAnimation =
    [CABasicAnimation
    animationWithKeyPath:@”transform”];
  11. scaleAnimation.fromValue = [NSValue
    valueWithCATransform3D:CATransform3DIdentity];
  12. scaleAnimation.toValue = [NSValue
    valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)];
  13. scaleAnimation.removedOnCompletion = YES;
    1. //创建透明度动画
  14. CABasicAnimation
    *alphaAnimation =
    [CABasicAnimation
    animationWithKeyPath:@”opacity”];
  15. alphaAnimation.fromValue = @1.0;
  16. alphaAnimation.toValue = @0.0;
  17. alphaAnimation.removedOnCompletion = YES;
  18. }

末段以以上动画放上一个动画片群组里面,即CAAnimationGroup类型的group,并拿动画片长到imageView的layer中,代码如下所示:

 

    • (IBAction)start:(id)sender
  1. {
  2. UIBezierPath *path = [UIBezierPath bezierPath];
  3. [self createCurve:path];
  4. //创建主要帧
  5. CAKeyframeAnimation *moveAnimation = [CAKeyframeAnimation
    animationWithKeyPath:@”position”];
  6. //设置相关属性
  7. moveAnimation.path =
    path.CGPath;
  8. moveAnimation.removedOnCompletion = YES;
    1. //创建缩放动画
  9. CABasicAnimation
    *scaleAnimation =
    [CABasicAnimation
    animationWithKeyPath:@”transform”];
  10. scaleAnimation.fromValue = [NSValue
    valueWithCATransform3D:CATransform3DIdentity];
  11. scaleAnimation.toValue = [NSValue
    valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)];
  12. scaleAnimation.removedOnCompletion = YES;
    1. //创建透明度动画
  13. CABasicAnimation
    *alphaAnimation =
    [CABasicAnimation
    animationWithKeyPath:@”opacity”];
  14. alphaAnimation.fromValue = @1.0;
  15. alphaAnimation.toValue = @0.0;
  16. alphaAnimation.removedOnCompletion = YES;
    1. //将上述动画放上一个动画组
  17. CAAnimationGroup
    *group = [CAAnimationGroup animation];
  18. group.animations =
    @[moveAnimation,
    scaleAnimation, alphaAnimation];
  19. group.duration =
    2.0;
  20. group.delegate =
    self;
  21. //加入到Layer中
  22. [self.imageView.layer addAnimation:group forKey:nil];
  23. }

实现animation的生命周期方法,当动画结束时拿imageView从界面及移除,代码如下所示:

 

    • (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
  1. {
  2. [self.imageView
    removeFromSuperview];
  3. }

2.3 步骤

落实此案例需要按如下步骤进行。

步骤一:拖放ImageView控件

先是在创建好的Xcode项目之Storyboard中拖放一个暨屏幕一样大小的ImageView控件,在右手边栏的检查器中为ImageView设置image,并将ImageView设置为TRViewController的属性imageView,代码如下所示:

 

  1. @interface TRViewController ()
  2. @property (weak, nonatomic) IBOutlet UIImageView *imageView;
  3. @end

步骤二:创建计时器

每当viewDidLoad方法吃开创一个计时器,每隔1/30秒重复调用方法changeAlpha:,代码如下所示:

  1. – (void)viewDidLoad
  2. {
  3. [super
    viewDidLoad];
  4.     [NSTimer scheduledTimerWithTimeInterval:1/FPS target:self selector:@selector(changeAlpha:)
    userInfo:nil repeats:YES];
  5. }

步骤三:实现changeAlpha:方法

先是定义两单宏FPS用来表示帧率,DURATION用来代表动画时长,在changeAlpha:方法吃因FPS和DURATION计算imageView的alpha值,代码如下所示:

 

  1. #define FPS 30.0 //帧率
  2. #define DURATION 5.0 //动画时长
  3. //当前值=开始值+当前的帧数*(结束值-开始值)/(帧率*时长)
  4. – (void)changeAlpha:(NSTimer *)timer
  5. {
  6. static NSUInteger count = 0;
  7. count++;
  8. self.imageView.alpha = count * 1.0/(FPS * DURATION);
  9. if (count >= FPS * DURATION) {
  10. [timer invalidate];
  11. }
  12. }

1 演示UIImage制作的动画

6.3 步骤

兑现此案例需要按照如下步骤进行。

步骤一:搭建Storyboard界面

第一在开立好之Xcode项目之Storyboard中拖放一个ImageView控件和季单Button控件,在右边边栏的检查器中装置ImageView和Button的性质,并以ImageView关联成TRRotationViewController的习性imageView,代码如下所示:

 

  1. @interface TRViewController ()
  2. @property (weak, nonatomic) IBOutlet UIImageView *imageView;
  3. @end

Storyboard中界面就的结果而图-9所展示:

图片 13

图-9

步骤二:实现3D旋转动画

首先以季单Button关联成TRRotationViewController的季只章程rotationX:、rotationY:、rotationZ:以及rotation:,

当viewDidLoad方法被安装imageView的layer属性,将imageView设置成圆角,代码如下所示:

 

  1. – (void)viewDidLoad
  2. {
  3. [super
    viewDidLoad];
  4. self.imageView.layer.cornerRadius = 8.0;
  5. self.imageView.layer.masksToBounds = YES;
  6. }

接下来实现四单Button的动作方法,在rotationX:方法吃通过layer的transform属性,实现力量围绕X轴旋转,然后采用类之法门实现方式rotationY:和rotationZ:,代码如下所示:

 

  1. – (IBAction)rotationX:(id)sender
  2. {
  3. //创建基本动画
  4. CABasicAnimation *transformAnimation = [CABasicAnimation animationWithKeyPath:@”transform”];
  5. transformAnimation.fromValue = [NSValue valueWithCATransform3D:self.imageView.layer.transform];
  6. //计算目标价
  7. transformAnimation.toValue = [NSValue valueWithCATransform3D:CATransform3DRotate(self.imageView.layer.transform, M_PI, 1.0, 0, 0)];
  8. transformAnimation.duration = 3.0;
  9. //将动画长到imageView的layer上面
  10. [self.imageView.layer addAnimation:transformAnimation forKey:nil];
  11. }
  12. – (IBAction)rotationY:(id)sender
  13. {
  14. CABasicAnimation *transformAnimation = [CABasicAnimation animationWithKeyPath:@”transform”];
  15. transformAnimation.fromValue = [NSValue valueWithCATransform3D:self.imageView.layer.transform];
  16. transformAnimation.toValue = [NSValue valueWithCATransform3D:CATransform3DRotate(self.imageView.layer.transform, M_PI, 0.0, 1.0, 0)];
  17. transformAnimation.duration = 3.0;
  18. [self.imageView.layer addAnimation:transformAnimation forKey:nil];
  19. }
  20. – (IBAction)rotationZ:(id)sender
  21. {
  22. CABasicAnimation *transformAnimation = [CABasicAnimation animationWithKeyPath:@”transform”];
  23. transformAnimation.fromValue = [NSValue valueWithCATransform3D:self.imageView.layer.transform];
  24. transformAnimation.toValue = [NSValue valueWithCATransform3D:CATransform3DRotate(self.imageView.layer.transform, M_PI, 0.0, 0.0, 1.0)];
  25. transformAnimation.duration = 3.0;
  26. [self.imageView.layer addAnimation:transformAnimation forKey:nil];
  27. }

末了实现rotation:方法,该法实现力量围绕在XYZ轴同时转,代码如下所示:

 

  1. – (IBAction)rotation:(id)sender
  2. {
  3. CABasicAnimation *transformAnimation = [CABasicAnimation animationWithKeyPath:@”transform”];
  4. transformAnimation.fromValue = [NSValue valueWithCATransform3D:self.imageView.layer.transform];
  5. transformAnimation.toValue = [NSValue valueWithCATransform3D:CATransform3DRotate(self.imageView.layer.transform, M_PI, 1.0, 1.0, 1.0)];
  6. transformAnimation.duration = 3.0;
  7. transformAnimation.delegate = self;
  8. [self.imageView.layer addAnimation:transformAnimation forKey:nil];
  9. }

实现animation的生命周期方法,当rotation动画结束时拿imageView的transform属性值保持无转移,从界面及移除,代码如下所示:

 

  1. – (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
  2. {
  3. self.imageView.layer.transform = CATransform3DRotate(self.imageView.layer.transform, M_PI, 1.0, 1.0, 1.0);
  4. }

6.3 步骤

落实此案例需要按如下步骤进行。

步骤一:搭建Storyboard界面

首先在创建好之Xcode项目之Storyboard中拖放一个ImageView控件和季独Button控件,在右侧边栏的检查器中安ImageView和Button的特性,并将ImageView关联成TRRotationViewController的属性imageView,代码如下所示:

 

  1. @interface TRViewController ()
  2. @property (weak, nonatomic) IBOutlet UIImageView *imageView;
  3. @end

Storyboard中界面就的结果一旦图-9所出示:

图片 14

图-9

步骤二:实现3D旋转动画

第一将季独Button关联成TRRotationViewController的季个点子rotationX:、rotationY:、rotationZ:以及rotation:,

在viewDidLoad方法吃设置imageView的layer属性,将imageView设置成圆角,代码如下所示:

 

    • (void)viewDidLoad
  1. {
  2. [super
    viewDidLoad];
  3. self.imageView.layer.cornerRadius = 8.0;
  4. self.imageView.layer.masksToBounds = YES;
  5. }

下一场实现四独Button的动作方法,在rotationX:方法中经layer的transform属性,实现力量围绕X轴旋转,然后利用类之不二法门实现方式rotationY:和rotationZ:,代码如下所示:

 

    • (IBAction)rotationX:(id)sender
  1. {
  2. //创建基本动画
  3. CABasicAnimation
    *transformAnimation = [CABasicAnimation
    animationWithKeyPath:@”transform”];
  4. transformAnimation.fromValue = [NSValue
    valueWithCATransform3D:self.imageView.layer.transform];
  5. //计算目标价
  6. transformAnimation.toValue = [NSValue
    valueWithCATransform3D:CATransform3DRotate(self.imageView.layer.transform, M_PI, 1.0, 0, 0)];
  7. transformAnimation.duration = 3.0;
  8. //将动画长到imageView的layer上面
  9. [self.imageView.layer addAnimation:transformAnimation forKey:nil];
  10. }
    • (IBAction)rotationY:(id)sender
  11. {
  12. CABasicAnimation
    *transformAnimation = [CABasicAnimation
    animationWithKeyPath:@”transform”];
  13. transformAnimation.fromValue = [NSValue
    valueWithCATransform3D:self.imageView.layer.transform];
  14. transformAnimation.toValue = [NSValue
    valueWithCATransform3D:CATransform3DRotate(self.imageView.layer.transform, M_PI, 0.0, 1.0, 0)];
  15. transformAnimation.duration = 3.0;
  16. [self.imageView.layer addAnimation:transformAnimation forKey:nil];
  17. }
    • (IBAction)rotationZ:(id)sender
  18. {
  19. CABasicAnimation
    *transformAnimation = [CABasicAnimation
    animationWithKeyPath:@”transform”];
  20. transformAnimation.fromValue = [NSValue
    valueWithCATransform3D:self.imageView.layer.transform];
  21. transformAnimation.toValue = [NSValue
    valueWithCATransform3D:CATransform3DRotate(self.imageView.layer.transform, M_PI, 0.0, 0.0, 1.0)];
  22. transformAnimation.duration = 3.0;
  23. [self.imageView.layer addAnimation:transformAnimation forKey:nil];
  24. }

末段实现rotation:方法,该方法实现力量围绕在XYZ轴同时转,代码如下所示:

 

    • (IBAction)rotation:(id)sender
  1. {
  2. CABasicAnimation
    *transformAnimation = [CABasicAnimation
    animationWithKeyPath:@”transform”];
  3. transformAnimation.fromValue = [NSValue
    valueWithCATransform3D:self.imageView.layer.transform];
  4. transformAnimation.toValue = [NSValue
    valueWithCATransform3D:CATransform3DRotate(self.imageView.layer.transform, M_PI, 1.0, 1.0, 1.0)];
  5. transformAnimation.duration = 3.0;
  6. transformAnimation.delegate = self;
  7. [self.imageView.layer addAnimation:transformAnimation forKey:nil];
  8. }

落实animation的生命周期方法,当rotation动画结束时以imageView的transform属性值保持无变换,从界面上移除,代码如下所示:

 

    • (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
  1. {
  2. self.imageView.layer.transform = CATransform3DRotate(self.imageView.layer.transform, M_PI, 1.0, 1.0, 1.0);
  3. }

5.2 方案

率先以开立好之Xcode项目的Storyboard中拖放一个ImageView控件和一个Button控件,在右侧边栏的检查器中安装ImageView和Button的特性,并以ImageView关联成TRAnimationViewController的属性imageView,将Button关联成TRAnimationViewController的主意start:。

下一场在viewDidLoad方法吃安装imageView的layer属性,将imageView设置成圆角。

终极实现start:方法,当点击按钮imageView开始推行动画。首先制定一个imageView的卡通片路径path,是一个UIBezierPath类型,然后分别创建关键帧动画、缩放动画与透明度改变动画,最后用以上动画放上一个动画群组里面,即CAAnimationGroup类型的group,并以动画片长到imageView的layer中。

3.3 步骤

实现此案例需要按照如下步骤进行。

步骤同:搭建界面

先是以创立好之Xcode项目的Storyboard中拖放一个ImageView控件和一个Label控件,在右边边栏的检查器中分头安装ImageView和Label的亮图片以及仿,ImageView显示飞机图片,Label显示文字“Welcome
To iGame“。

其次将ImageView和Label关联成TRViewController的属性aircraft和welcomeLabel,代码如下所示:

  1. @interface TRViewController ()
  2. @property (weak, nonatomic) IBOutlet UILabel *welcomeLabel;
  3. @property (weak, nonatomic) IBOutlet UIImageView *aircraft;
  4. @end

然后以Storyboard中拖放一个Button对象,设置标题为Start,并涉嫌成TRViewController的方start:。

末尾Storyboard中做到的界面如图-4所展示:

图片 15

图-4

步骤二:使用UIView实现动画

率先以viewDidLoad方法被采用UIView的动画方法实现welcomeLabel的入场动画,welcomeLabel从屏幕的左侧进入屏幕,使用UIView的动画片方法animateWithDuration:
delay: usingSpringWithDamping: initialSpringVelocity:
options:增加弹簧效果,代码如下所示:

 

    • (void)viewDidAppear:(BOOL)animated
  1. {
  2. [super
    viewDidAppear:animated];
  3. //结束位置
  4.     CGRect
    endFrame = self.welcomeLabel.frame;
  5. //开始位置
  6. CGRect startFrame
    = endFrame;
  7. startFrame.origin.x
    = – startFrame.size.width;
  8. //welcome的入场动画
  9. self.welcomeLabel.frame = startFrame;
  10. self.welcomeLabel.alpha = 0.1;
  11. [UIView animateWithDuration:5.0 delay:0.3 usingSpringWithDamping:0.1
    initialSpringVelocity:5 options:UIViewAnimationOptionCurveEaseInOut animations:^{
  12. self.welcomeLabel.frame = endFrame;
  13. self.welcomeLabel.alpha = 1.0;
  14. } completion:^(BOOL finished) {
  15. NSLog(@”动画结束”);
  16. }];
  17. }

接下来实现飞机的入场动画,飞机于屏幕的花花世界飞入屏幕,代码如下所示:

 

    • (void)viewDidAppear:(BOOL)animated
  1. {
  2. [super
    viewDidAppear:animated];
  3. //结束位置
  4.     CGRect
    endFrame = self.welcomeLabel.frame;
  5. //开始位置
  6. CGRect startFrame
    = endFrame;
  7. startFrame.origin.x
    = – startFrame.size.width;
  8. //welcome的入场动画
  9. self.welcomeLabel.frame = startFrame;
  10. self.welcomeLabel.alpha = 0.1;
  11. [UIView animateWithDuration:5.0 delay:0.3 usingSpringWithDamping:0.1
    initialSpringVelocity:5 options:UIViewAnimationOptionCurveEaseInOut animations:^{
  12. self.welcomeLabel.frame = endFrame;
  13. self.welcomeLabel.alpha = 1.0;
  14. } completion:^(BOOL finished) {
  15. NSLog(@”动画结束”);
  16. }];
  17. //飞机的入场动画
  18. endFrame = self.aircraft.frame;
  19. startFrame = endFrame;
  20. startFrame.origin.y
    = self.view.bounds.size.height;
  21. self.aircraft.frame
    = startFrame;
  22. [UIView animateWithDuration:2.0 animations:^{
  23. self.aircraft.frame
    = endFrame;
  24. }];
  25. }

终极实现方式start:完成飞机的飞动画,飞机于屏幕下方飞到屏幕上,并且以动画结束以后往往在屏幕被飞行,代码如下所示:

 

    • (IBAction)start:(UIButton *)sender
  1. {
  2. CGPoint point
    = self.aircraft.center;
  3. point.y = 80;
  4. [UIView animateWithDuration:3.0 delay:1.0 options:UIViewAnimationOptionCurveEaseInOut|UIViewAnimationOptionRepeat|UIViewAnimationOptionAutoreverse animations:^{
  5. self.aircraft.center
    = point;
  6. } completion:^(BOOL finished) {
  7. NSLog(@”动画结束”);
  8. }];
  9. }

4.4 完整代码

此案例中,TRViewController.m文件被的完好代码如下所示:

 

  1. #import “TRViewController.h”
    1. @interface TRViewController ()
  2. @property (weak, nonatomic) IBOutlet UIImageView *imageView;
  3. @end
    1. @implementation TRViewController
    1. – (void)viewDidLoad
  4. {
  5. [super
    viewDidLoad];
  6. //设置view的layer
  7.     CALayer *layer = self.view.layer;
  8. layer.backgroundColor = [[UIColor orangeColor] CGColor];
  9. layer.cornerRadius = 30.0;
  10. //将imageView设置成圆角
  11. self.imageView.layer.cornerRadius = 10.0;
  12. //打开遮罩,否则无效
  13. self.imageView.layer.masksToBounds =YES;
    1. //加子层
  14. CALayer *subLayer = [CALayer layer];
  15. subLayer.backgroundColor = [UIColor purpleColor].CGColor;
  16. subLayer.frame = CGRectMake(30, 200, 100, 120);
  17. subLayer.shadowColor = [UIColor greenColor].CGColor;
  18. subLayer.shadowOffset = CGSizeMake(2, 2);
  19. subLayer.shadowRadius = 5.0;
  20. subLayer.shadowOpacity = 0.8;
  21. subLayer.cornerRadius = 10.0;
  22. [layer addSublayer:subLayer];
    1. //加起内容的子层
  23. CALayer *imageLayer = [CALayer new];
  24. imageLayer.frame = CGRectMake(180, 300, 100, 120);
  25. imageLayer.contents = (id)[UIImage imageNamed:@”d.jpg”].CGImage;
  26. imageLayer.cornerRadius = 10.0;
  27. imageLayer.masksToBounds = YES;
  28. [layer addSublayer:imageLayer];
  29. }
  30. @end 

2.3 步骤

落实此案例需要以如下步骤进行。

步骤一:拖放ImageView控件

第一在开创好之Xcode项目之Storyboard中拖放一个跟屏幕一样大小的ImageView控件,在右边边栏的检查器中叫ImageView设置image,并将ImageView设置为TRViewController的属性imageView,代码如下所示:

 

  1. @interface TRViewController ()
  2. @property (weak, nonatomic) IBOutlet UIImageView *imageView;
  3. @end

步骤二:创建计时器

以viewDidLoad方法中开创一个计时器,每隔1/30秒重复调用方法changeAlpha:,代码如下所示:

    • (void)viewDidLoad
  1. {
  2. [super
    viewDidLoad];
  3.     [NSTimer scheduledTimerWithTimeInterval:1/FPS target:self selector:@selector(changeAlpha:)
    userInfo:nil repeats:YES];
  4. }

步骤三:实现changeAlpha:方法

率先定义两只宏FPS用来表示帧率,DURATION用来表示动画时长,在changeAlpha:方法中冲FPS和DURATION计算imageView的alpha值,代码如下所示:

 

  1. #define FPS 30.0 //帧率
  2. #define DURATION 5.0 //动画时长
  3. //当前值=开始值+当前底帧数*(结束值-开始值)/(帧率*时长)
    • (void)changeAlpha:(NSTimer *)timer
  4. {
  5. static NSUInteger count = 0;
  6. count++;
  7. self.imageView.alpha
    = count * 1.0/(FPS * DURATION);
  8. if (count >= FPS * DURATION) {
  9. [timer invalidate];
  10. }
  11. }

3.1 问题

UIView动画是UIKit提供专门制造动画的API,其精神是针对CoreAnimation的包装,使用UIView可以轻松方便之落实动画,不需要经其他计算,本案例用UIView制作一个飞机运动的卡通,如图-3所著:

图片 16

图-3

4.4 完整代码

此案例中,TRViewController.m文件被的完整代码如下所示:

 

  1. #import “TRViewController.h”
    1. @interface
      TRViewController ()
  2. @property (weak, nonatomic) IBOutlet UIImageView *imageView;
  3. @end
    1. @implementation TRViewController
      • (void)viewDidLoad
  4. {
  5. [super
    viewDidLoad];
  6. //设置view的layer
  7.     CALayer *layer = self.view.layer;
  8. layer.backgroundColor = [[UIColor orangeColor] CGColor];
  9. layer.cornerRadius =
    30.0;
  10. //将imageView设置成圆角
  11. self.imageView.layer.cornerRadius = 10.0;
  12. //打开遮罩,否则无效
  13. self.imageView.layer.masksToBounds =YES;
    1. //加子层
  14. CALayer *subLayer = [CALayer layer];
  15. subLayer.backgroundColor = [UIColor purpleColor].CGColor;
  16. subLayer.frame =
    CGRectMake(30, 200, 100, 120);
  17. subLayer.shadowColor = [UIColor greenColor].CGColor;
  18. subLayer.shadowOffset = CGSizeMake(2, 2);
  19. subLayer.shadowRadius = 5.0;
  20. subLayer.shadowOpacity = 0.8;
  21. subLayer.cornerRadius = 10.0;
  22. [layer addSublayer:subLayer];
    1. //加起情的子层
  23. CALayer *imageLayer = [CALayer new];
  24. imageLayer.frame =
    CGRectMake(180, 300, 100, 120);
  25. imageLayer.contents = (id)[UIImage imageNamed:@”d.jpg”].CGImage;
  26. imageLayer.cornerRadius = 10.0;
  27. imageLayer.masksToBounds = YES;
  28. [layer addSublayer:imageLayer];
  29. }
  30. @end 

2.1 问题

NSTimer是一个计时器类,用于定时为指定对象发送信息,本案例使NSTimer制作一个图淡入的机能,即各级隔得之时光变更图片的alpha值,如图-2所著:

图片 17

图-2

6.2 方案

首先以创立好之Xcode项目之Storyboard中拖放一个ImageView控件和季独Button控件,在右侧边栏的检查器中安ImageView和Button的性能,并拿ImageView关联成TRRotationViewController的性imageView。

再度以季独Button关联成TRRotationViewController的季个法子rotationX:、rotationY:、rotationZ:以及rotation:。

下一场在viewDidLoad方法吃设置imageView的layer属性,将imageView设置成圆角。

末尾实现四只Button的动作方法,rotationX:实现力量围绕X轴旋转,rotationY:实现效益围绕Y轴转动,rotationZ:实现效益围绕Z轴旋转,rotation:实现力量围绕在XYZ轴同时转。

6.2 方案

先是以创造好之Xcode项目的Storyboard中拖放一个ImageView控件和季只Button控件,在右边边栏的检查器中设置ImageView和Button的性能,并将ImageView关联成TRRotationViewController的性imageView。

又用季只Button关联成TRRotationViewController的季独方法rotationX:、rotationY:、rotationZ:以及rotation:。

下一场于viewDidLoad方法被安装imageView的layer属性,将imageView设置成圆角。

最后实现四个Button的动作方法,rotationX:实现力量围绕X轴旋转,rotationY:实现效益围绕Y轴转动,rotationZ:实现力量围绕Z轴旋转,rotation:实现效益围绕着XYZ轴同时转。

1.1 问题

UIImage动画是IOS提供的极基本的动画,通常用于制造有小型的卡通片,本案例以UIImage制作一个小狗跑动的卡通,如图-1所展示:

图片 18

图-1

6 使用CATransform3D制作3D动画

5 使用CoreAnimation制作动画

相关文章