如何在ios中运用core animation暂停和继续动画

 我来答
huanglenzhi
2015-01-09 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517195
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
<PRE class=cpp name="code">//暂停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 class=cpp name="code">#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><PRE class=cpp name="code">#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>
心利小际
2015-11-07 · 知道合伙人影视综艺行家
心利小际
知道合伙人影视综艺行家
采纳数:76 获赞数:7534
学生

向TA提问 私信TA
展开全部
如何在ios中运用core
animation暂停和继续动画

核心代码如下

//暂停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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式