在ios中运用core animation暂停和继续动画
本文转载至 http://blog.csdn.net/wildfireli/article/details/23191861
暂停和继续动画的核心代码如下:
- <pre name="code" class="cpp">//暂停layer上面的动画
- - (void)pauseLayer:(CALayer*)layer
- {
- CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
- layer.speed = 0.0;
- layer.timeOffset = pausedTime;
- }
- //继续layer上面的动画
- - (void)resumeLayer:(CALayer*)layer
- {
- CFTimeInterval pausedTime = [layer timeOffset];
- layer.speed = 1.0;
- layer.timeOffset = 0.0;
- layer.beginTime = 0.0;
- CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
- layer.beginTime = timeSincePause;
- }</pre><br>
- <pre></pre>
- <p>附上完整代码</p>
- <p></p>
- <p class="p1">AnimationPauseViewController.h</p>
- <pre name="code" class="cpp">#import <UIKit/UIKit.h>
- @interface AnimationPauseViewController : UIViewController {
- UIImageView *soccer;
- BOOL isPause;
- UIButton *controlButton;
- }
- @property (nonatomic, retain) IBOutlet UIImageView *soccer;
- - (IBAction)clickControlButton:(id)sender;
- @property (nonatomic, retain) IBOutlet UIButton *controlButton;
- @end</pre><br>
- <p></p>
- <p class="p1">AnimationPauseViewController.m</p>
- <p></p><pre name="code" class="cpp">#import "AnimationPauseViewController.h"
- #import <QuartzCore/QuartzCore.h>
- @implementation AnimationPauseViewController
- @synthesize controlButton;
- @synthesize soccer;
- - (void)dealloc
- {
- [soccer release];
- [controlButton release];
- [super dealloc];
- }
- - (void)didReceiveMemoryWarning
- {
- // Releases the view if it doesn't have a superview.
- [super didReceiveMemoryWarning];
- // Release any cached data, images, etc that aren't in use.
- }
- - (void)addAnimations
- {
- //让足球来回移动
- CABasicAnimation *translation = [CABasicAnimation animationWithKeyPath:@"position"];
- translation.fromValue = [NSValue valueWithCGPoint:CGPointMake(24, 240)];
- translation.toValue = [NSValue valueWithCGPoint:CGPointMake(320- 24, 240)];
- translation.duration = 2;
- translation.repeatCount = HUGE_VALF;
- translation.autoreverses = YES;
- //让足球来回转动
- CABasicAnimation *rotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
- //kCAMediaTimingFunctionLinear 表示时间方法为线性,使得足球匀速转动
- rotation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
- rotation.toValue = [NSNumber numberWithFloat:4 * M_PI];
- rotation.duration = 2;
- rotation.repeatCount = HUGE_VALF;
- rotation.autoreverses = YES;
- [soccer.layer addAnimation:rotation forKey:@"rotation"];
- [soccer.layer addAnimation:translation forKey:@"translation"];
- }
- #pragma mark - View lifecycle
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- [self addAnimations];
- }
- - (void)viewDidUnload
- {
- [self setSoccer:nil];
- [self setControlButton:nil];
- [super viewDidUnload];
- }
- - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
- {
- // Return YES for supported orientations
- return (interfaceOrientation == UIInterfaceOrientationPortrait);
- }
- //暂停layer上面的动画
- - (void)pauseLayer:(CALayer*)layer
- {
- CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
- layer.speed = 0.0;
- layer.timeOffset = pausedTime;
- }
- //继续layer上面的动画
- - (void)resumeLayer:(CALayer*)layer
- {
- CFTimeInterval pausedTime = [layer timeOffset];
- layer.speed = 1.0;
- layer.timeOffset = 0.0;
- layer.beginTime = 0.0;
- CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
- layer.beginTime = timeSincePause;
- }
- - (void)pauseSoccer
- {
- isPause = YES;
- [controlButton setTitle:@"继续" forState:UIControlStateNormal];
- [self pauseLayer:soccer.layer];
- }
- - (void)resumeSoccer
- {
- isPause = NO;
- [controlButton setTitle:@"暂停" forState:UIControlStateNormal];
- [self resumeLayer:soccer.layer];
- }
- - (IBAction)clickControlButton:(id)sender {
- if (isPause) {
- [self resumeSoccer];
- }else{
- [self pauseSoccer];
- }
- }
- @end</pre><br>
- <br>
- <p></p>
在ios中运用core animation暂停和继续动画的更多相关文章
- 使用Core Animation对象来实现动画
转载保留原文地址:http://blog.csdn.net/kqjob/article/details/10417461,转载的 在iOS中如果使用普通的动画则可以使用UIKit提供的动画方式来实现, ...
- iOS开发之Core Animation
在IOS中如果使用普通的动画则可以使用UIKit提供的动画方式来实现,如果想实现更复杂的效果,则需要使用Core Animation了. 在Core Animation中我们经常使用的是 CABasi ...
- iOS Instruments之Core Animation动画性能调优(工具复选框选项介绍)
Core Animation工具用来监测Core Animation性能.它给我们提供了周期性的FPS,并且考虑到了发生在程序之外的动画(见图12.4) Core Animation工具提供了一系列复 ...
- iOS Core Animation学习总结(3)--动画的基本类型
一. CABasicAnimation (基础动画) 移位: CABasicAnimation *animation = [CABasicAnimation animation]; //keyPath ...
- Core Animation之CABasicAnimation(基础动画)
#import "ViewController.h" @interface ViewController () @property(nonatomic,strong)UIButto ...
- core Animation之CAKeyframeAnimation(关键帧动画)
CABasicAnimation的区别是:CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSA ...
- iOS开发基础知识:Core Animation(核心动画)
Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就可以实现非常强大的功能. Core A ...
- iOS之核心动画(Core Animation)
Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就可以实现非常强大的功能. Core ...
- iOS开发 - Core Animation 核心动画
Core Animation Core Animation.中文翻译为核心动画,它是一组很强大的动画处理API,使用它能做出很炫丽的动画效果.并且往往是事半功倍. 也就是说,使用少量的代码就能够实现很 ...
随机推荐
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-人机界面HMI自锁按钮和自复位按钮如何理解(Toggle variable Tap variable)
我分别创建两个按钮,自锁和自复位,绑定到主程序的两个布尔值上去 自锁按钮是指点击一下为TRUE,再点击一下为FALSE,自复位按钮是指按下的时候为TRUE,松开的时候为FALSE(也可以勾选Tap ...
- n皇后问题[分支限界法]
问题: 如何能够在 n×n 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上. 分析: 我们可以用一串数字来表示问题 ...
- 道具搜索框(|=, & , ^=)实现的列子
需求: 勾上界面上多选框筛选出符合的道具 思路: 1. 使用组合数字让一个数字包含多这个搜索条件,比如2代表搜索衣服和武器, 数字按照2的n次幂的值递增,通过|,&,^运算符实现一个数字包含多 ...
- MvcPager帮助文档 - MvcAjaxOptions 类
表示用于 MvcPager 在 Ajax 分页模式下的选项设置,该类继承自 AjaxOptions. 公共属性: 名称 说明 默认值 AllowCache 获取或设置一个值,该值指示是否在Ajax分页 ...
- win10 rabbitMQ的安装与测试
安装 1.首先,下载并运行Erlang for Windows 安装程序 (地址:http://www.erlang.org/downloads)下载完毕并安装(注意:安装目录请选择默认目录) 2.下 ...
- springboot学习(七) 使用JdbcTemplate
1.对内嵌数据库的支持 内嵌数据库通常用于开发和测试环境,不推荐用于生产环境.Spring Boot提供自动配置的嵌入式数据库有H2.HSQL.Derby,你不需要提供任何连接配置就能使用. 例子: ...
- vue 记一次编译没反应、无进度、没有任何报错的提示,但后台却TM一直消耗内存的BUG:
控制台一直提示“building for production...”,而且spinner停止了动画! 由于没有任何的提示.况且项目的代码.结构.设计完全未知模糊的情况下,我只能按照unix的理念“使 ...
- SQl查询数据库表名、表的列名、数据类型、主键
1.获取所有数据库名: 2.Select Name FROM Master..SysDatabases order by Name 3. 4.2.获取所有表名: 5. (1) ...
- angular4 radio checkbox 有用
<span *ngFor="let op of [{'id':'a','text':'11'},{'id':'b','text':'2222'},{'id':'cc','text':' ...
- android学习十三(android的通知使用)
通知(Notification)是android系统中比較有特色的一个功能,当某个应用程序希望向用户发出一些提示信息.而该应用程序又不在前台执行时,就能够借助通知来实现.发出一条通知后,手机最上方的状 ...