暂停和恢复动画 iOS 中的旋转除外?
Pause and resume animations except of rotation in iOS?
如果我只需要 pause/resume 旋转,那么我使用以下代码:
- (void)pauseAnimations
{
CFTimeInterval paused_time = [self.layer convertTime:CACurrentMediaTime() fromLayer:nil];
self.layer.speed = 0.0;
self.layer.timeOffset = paused_time;
}
- (void)resumeAnimations
{
CFTimeInterval paused_time = [self.layer timeOffset];
self.layer.speed = 1.0f;
self.layer.timeOffset = 0.0f;
self.layer.beginTime = 0.0f;
CFTimeInterval time_since_pause = [self.layer convertTime:CACurrentMediaTime() fromLayer:nil] - paused_time;
self.layer.beginTime = time_since_pause;
}
但是我想在旋转之前停止当前层动画并在旋转之后恢复。这段代码也停止了旋转过程。
如何解决这个问题?
您不能通过将图层的速度设置为 0 来暂停图层的所有动画,只有一个动画。
您可能能够从图层中获取活动动画并使用您用于暂停整个图层动画的技术(将速度设置为 0)暂停单个动画。
请注意,您不能保存指向您创建的动画对象的指针,因为系统实际上将动画的副本添加到图层,而不是原始动画。您可能需要使用 CALayer
animationForKey
方法获取动画。
免责声明:我从来没有试过这个。我的回答是基于对 Core Animation 工作原理的一般了解。
如果我只需要 pause/resume 旋转,那么我使用以下代码:
- (void)pauseAnimations
{
CFTimeInterval paused_time = [self.layer convertTime:CACurrentMediaTime() fromLayer:nil];
self.layer.speed = 0.0;
self.layer.timeOffset = paused_time;
}
- (void)resumeAnimations
{
CFTimeInterval paused_time = [self.layer timeOffset];
self.layer.speed = 1.0f;
self.layer.timeOffset = 0.0f;
self.layer.beginTime = 0.0f;
CFTimeInterval time_since_pause = [self.layer convertTime:CACurrentMediaTime() fromLayer:nil] - paused_time;
self.layer.beginTime = time_since_pause;
}
但是我想在旋转之前停止当前层动画并在旋转之后恢复。这段代码也停止了旋转过程。
如何解决这个问题?
您不能通过将图层的速度设置为 0 来暂停图层的所有动画,只有一个动画。
您可能能够从图层中获取活动动画并使用您用于暂停整个图层动画的技术(将速度设置为 0)暂停单个动画。
请注意,您不能保存指向您创建的动画对象的指针,因为系统实际上将动画的副本添加到图层,而不是原始动画。您可能需要使用 CALayer
animationForKey
方法获取动画。
免责声明:我从来没有试过这个。我的回答是基于对 Core Animation 工作原理的一般了解。