本文转载至 http://blog.csdn.net/wildfireli/article/details/23191861

暂停和继续动画的核心代码如下:

  1. <pre name="code" class="cpp">//暂停layer上面的动画
  2. - (void)pauseLayer:(CALayer*)layer
  3. {
  4. CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
  5. layer.speed = 0.0;
  6. layer.timeOffset = pausedTime;
  7. }
  8. //继续layer上面的动画
  9. - (void)resumeLayer:(CALayer*)layer
  10. {
  11. CFTimeInterval pausedTime = [layer timeOffset];
  12. layer.speed = 1.0;
  13. layer.timeOffset = 0.0;
  14. layer.beginTime = 0.0;
  15. CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
  16. layer.beginTime = timeSincePause;
  17. }</pre><br>
  18. <pre></pre>
  19. <p>附上完整代码</p>
  20. <p></p>
  21. <p class="p1">AnimationPauseViewController.h</p>
  22. <pre name="code" class="cpp">#import <UIKit/UIKit.h>
  23. @interface AnimationPauseViewController : UIViewController {
  24. UIImageView *soccer;
  25. BOOL isPause;
  26. UIButton *controlButton;
  27. }
  28. @property (nonatomic, retain) IBOutlet UIImageView *soccer;
  29. - (IBAction)clickControlButton:(id)sender;
  30. @property (nonatomic, retain) IBOutlet UIButton *controlButton;
  31. @end</pre><br>
  32. <p></p>
  33. <p class="p1">AnimationPauseViewController.m</p>
  34. <p></p><pre name="code" class="cpp">#import "AnimationPauseViewController.h"
  35. #import <QuartzCore/QuartzCore.h>
  36. @implementation AnimationPauseViewController
  37. @synthesize controlButton;
  38. @synthesize soccer;
  39. - (void)dealloc
  40. {
  41. [soccer release];
  42. [controlButton release];
  43. [super dealloc];
  44. }
  45. - (void)didReceiveMemoryWarning
  46. {
  47. // Releases the view if it doesn't have a superview.
  48. [super didReceiveMemoryWarning];
  49. // Release any cached data, images, etc that aren't in use.
  50. }
  51. - (void)addAnimations
  52. {
  53. //让足球来回移动
  54. CABasicAnimation *translation = [CABasicAnimation animationWithKeyPath:@"position"];
  55. translation.fromValue = [NSValue valueWithCGPoint:CGPointMake(24, 240)];
  56. translation.toValue = [NSValue valueWithCGPoint:CGPointMake(320- 24, 240)];
  57. translation.duration = 2;
  58. translation.repeatCount = HUGE_VALF;
  59. translation.autoreverses = YES;
  60. //让足球来回转动
  61. CABasicAnimation *rotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
  62. //kCAMediaTimingFunctionLinear 表示时间方法为线性,使得足球匀速转动
  63. rotation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
  64. rotation.toValue = [NSNumber numberWithFloat:4 * M_PI];
  65. rotation.duration = 2;
  66. rotation.repeatCount = HUGE_VALF;
  67. rotation.autoreverses = YES;
  68. [soccer.layer addAnimation:rotation forKey:@"rotation"];
  69. [soccer.layer addAnimation:translation forKey:@"translation"];
  70. }
  71. #pragma mark - View lifecycle
  72. - (void)viewDidLoad
  73. {
  74. [super viewDidLoad];
  75. [self addAnimations];
  76. }
  77. - (void)viewDidUnload
  78. {
  79. [self setSoccer:nil];
  80. [self setControlButton:nil];
  81. [super viewDidUnload];
  82. }
  83. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
  84. {
  85. // Return YES for supported orientations
  86. return (interfaceOrientation == UIInterfaceOrientationPortrait);
  87. }
  88. //暂停layer上面的动画
  89. - (void)pauseLayer:(CALayer*)layer
  90. {
  91. CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
  92. layer.speed = 0.0;
  93. layer.timeOffset = pausedTime;
  94. }
  95. //继续layer上面的动画
  96. - (void)resumeLayer:(CALayer*)layer
  97. {
  98. CFTimeInterval pausedTime = [layer timeOffset];
  99. layer.speed = 1.0;
  100. layer.timeOffset = 0.0;
  101. layer.beginTime = 0.0;
  102. CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
  103. layer.beginTime = timeSincePause;
  104. }
  105. - (void)pauseSoccer
  106. {
  107. isPause = YES;
  108. [controlButton setTitle:@"继续" forState:UIControlStateNormal];
  109. [self pauseLayer:soccer.layer];
  110. }
  111. - (void)resumeSoccer
  112. {
  113. isPause = NO;
  114. [controlButton setTitle:@"暂停" forState:UIControlStateNormal];
  115. [self resumeLayer:soccer.layer];
  116. }
  117. - (IBAction)clickControlButton:(id)sender {
  118. if (isPause) {
  119. [self resumeSoccer];
  120. }else{
  121. [self pauseSoccer];
  122. }
  123. }
  124. @end</pre><br>
  125. <br>
  126. <p></p>

在ios中运用core animation暂停和继续动画的更多相关文章

  1. 使用Core Animation对象来实现动画

    转载保留原文地址:http://blog.csdn.net/kqjob/article/details/10417461,转载的 在iOS中如果使用普通的动画则可以使用UIKit提供的动画方式来实现, ...

  2. iOS开发之Core Animation

    在IOS中如果使用普通的动画则可以使用UIKit提供的动画方式来实现,如果想实现更复杂的效果,则需要使用Core Animation了. 在Core Animation中我们经常使用的是 CABasi ...

  3. iOS Instruments之Core Animation动画性能调优(工具复选框选项介绍)

    Core Animation工具用来监测Core Animation性能.它给我们提供了周期性的FPS,并且考虑到了发生在程序之外的动画(见图12.4) Core Animation工具提供了一系列复 ...

  4. iOS Core Animation学习总结(3)--动画的基本类型

    一. CABasicAnimation (基础动画) 移位: CABasicAnimation *animation = [CABasicAnimation animation]; //keyPath ...

  5. Core Animation之CABasicAnimation(基础动画)

    #import "ViewController.h" @interface ViewController () @property(nonatomic,strong)UIButto ...

  6. core Animation之CAKeyframeAnimation(关键帧动画)

    CABasicAnimation的区别是:CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSA ...

  7. iOS开发基础知识:Core Animation(核心动画)

    Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就可以实现非常强大的功能. Core A ...

  8. iOS之核心动画(Core Animation)

      Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就可以实现非常强大的功能. Core ...

  9. iOS开发 - Core Animation 核心动画

    Core Animation Core Animation.中文翻译为核心动画,它是一组很强大的动画处理API,使用它能做出很炫丽的动画效果.并且往往是事半功倍. 也就是说,使用少量的代码就能够实现很 ...

随机推荐

  1. Hadoop+Spark+Hbase部署整合篇

    之前的几篇博客中记录的Hadoop.Spark和Hbase部署过程虽然看起来是没多大问题,但是之后在上面跑任务的时候出现了各种各样的配置问题.庆幸有将问题记录下来,可以整理出这篇部署整合篇. 确保集群 ...

  2. [Functional Programming] Draw Items from One JavaScript Array to Another using a Pair ADT

    We want to be able to pick nine random cards from an array of twelve cards, but can run into problem ...

  3. maven 插件之 AutoConfig 工具使用笔记

    AutoConfig 是一款 maven 插件,主要用于 Maven 项目打包使用.在我们的工作中,会将自己写的代码打成 jar 包或者 war 包发布到各种环境上.一般地,不用的环境所使用的数据库. ...

  4. 从webstorm转vscode,来一个vscode的教程和心得总结

    背景 在公司跑代码,每天卡的吐血,感觉生命都被浪费了. 再在摧残了一段时间,天天想摔电脑以后,被同事安利vscode, 那就开始搞起来 安装 这个我真的不用说了吧 插件 快捷键 shift + alt ...

  5. utf8和utf-8的区别?

      utf8和utf-8的区别? utf-8和utf8的区别? 今天再次区别   相信很多程序员刚开始也会有这样的疑惑,如题,我也是. 其实,他们可以这样来区分. 一.在php和html中设置编码,请 ...

  6. 对象内部属性[[Class]]

    1.概述 所有的typeof返回值为‘object’的对象都包含一个内部属性[[Class]],我们将它可以看做内部的分类,而非传统面向对象意义的分类.这个属性无法直接访问,一般通过Object.pr ...

  7. C++ 和 java 使用 AES CBC 128 加解密

    Java 使用jce, code: import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax ...

  8. android 调用系统界面

    现在开发中的功能需要直接跳转到拨号.联系人.短信界面等等,查找了很多资料,自己整理了一下. 首先,我们先看拨号界面,代码如下: Intent intent =new Intent(); intent. ...

  9. linux归档压缩命令

    1.tar     tar    -cf    output.tar    file1.txt     file2.txt ..     tar    -rvf    output.tar    fl ...

  10. Eclipse3.4以上使用dropins的插件安装方式

    Eclipse3.4以上版本支持使用dropins的插件安装方式,使用方便,共有四种使用方法: 1. 最简单的,直接将jar包放到dropins目录下eclipse/    dropins/ 2. 传 ...