Core Animation动画暂停和恢复

本文介绍如何使用Objective-C暂停和恢复CALayer动画。通过设置speed和timeOffset属性实现暂停,通过调整speed、timeOffset及beginTime实现恢复。文章详细解释了这些属性的作用及其在暂停与恢复过程中的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-(void)pauseLayer:(CALayer*)layer {
   CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
   layer.speed = 0.0;
   layer.timeOffset = pausedTime;
}
 
-(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;
}

/* Additional offset in active local time. i.e. to convert from parent
* time tp to active local time t: t = (tp - begin) * speed + offset.
* One use of this is to "pause" a layer by setting `speed' to zero and
* `offset' to a suitable value. Defaults to 0. */
@property CFTimeInterval timeOffset;
/* The begin time of the object, in relation to its parent object, if
* applicable. Defaults to 0. */
@property CFTimeInterval beginTime

因为父对象的时间转换为有效本地时间是通过t = (tp - begin) * speed + offset计算的。

当暂停时,speed被设置为0.0,父对象的时间转换为有效本地时间需要设置offset为当前本地时间。

当恢复时,speed被设置为1.0,父对象的时间转换为有效本地时间需要设置offset为0.0,beginTime为经过的本地时间。因为tp(父对象时间)已经经过了timeSincePause,所以t = (tp - begin) * speed + offset的begin需要设置为timeSincePause。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值