0

我正在尝试制作 2 个同时开始并使用相同曲线的核心动画,但如果满足条件,则需要停止其中一个。例如,我在左侧有以下视图,并希望过渡到右侧。

在此处输入图像描述

红色视图可以被视为黄色视图之上的叠加层,即使一开始它们没有相交。想象一下点击“第 3 项”。我需要做的是将所有行的动画移动到顶部的距离 -item3.frame.origin.y,但是一旦title3到达屏幕顶部,它应该留在那里,所以剩下的item1 item2看起来就像它们在后面滑动title3

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

-(void)layoutSubviews {
    CALayer* presentationLayer = (CALayer*)[self.title3.layer presentationLayer];
    if (presentationLayer.frame.origin.y <= 0) {
        [self.title3.layer removeAllAnimations];
    }
}

但没有任何成功。有什么方法可以让它使用核心动画而不是使用CADisplayLink. 我不能使用两个单独的动画,因为很难计算 title3 动画的持续时间,这会在动画曲线不是线性的情况下title3产生间隙。title2

4

1 回答 1

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;
}
于 2013-11-12T21:52:33.670 回答