我正在尝试制作两个核心动画,它们同时启动并使用相同的曲线,但如果条件满足则需要停止其中一个。例如。我在左边有以下视图,想要转换到右边的视图。
红色视图可以视为黄色视图顶部的叠加层,即使在开始时它们不相交。想象一下,点击“第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动画的持续时间,这会在CADisplayLink
和title3
之间产生差距。
答案 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;
}