在满足某些条件时停止图层上的核心动画

时间:2013-11-12 21:25:11

标签: ios iphone animation core-animation

我正在尝试制作两个核心动画,它们同时启动并使用相同的曲线,但如果条件满足则需要停止其中一个。例如。我在左边有以下视图,想要转换到右边的视图。

enter image description here

红色视图可以视为黄色视图顶部的叠加层,即使在开始时它们不相交。想象一下,点击“第3项”。我需要做的是将所有行的移动设置为距离-item3.frame.origin.y的顶部动画,但一旦title3到达屏幕顶部,它应该保留在那里,以便剩下的item1 {{1}看起来他们会在item2

后面滑动

我尝试使用核心动画使用选项title3为所有元素设置动画,然后在UIViewAnimationsOptionLayoutSubviews中使用以下代码停止动画:

layoutSubview

但没有任何成功。有没有办法让它使用核心动画,而不用-(void)layoutSubviews { CALayer* presentationLayer = (CALayer*)[self.title3.layer presentationLayer]; if (presentationLayer.frame.origin.y <= 0) { [self.title3.layer removeAllAnimations]; } } 嘲笑。我不能使用两个单独的动画,因为如果动画曲线不是线性的,则很难计算title3动画的持续时间,这会在CADisplayLinktitle3之间产生差距。

1 个答案:

答案 0 :(得分:0)

您可以按照Apple的技术说明QA1673通过以下代码实现暂停/开始图层动画功能:

-(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;
}