gpt4 book ai didi

iphone - 同时在不同层中使用多个 CAKeyframeAnimation

转载 作者:行者123 更新时间:2023-12-03 18:58:55 25 4
gpt4 key购买 nike

现在有人如何使用 CAKeyframeAnimation 同时为多个图层设置动画吗?每个层都有自己的 CAKeyframeAnimation 对象。看一下下面的代码:

我有一个接收对象、创建 CAKeyframeAnimation 并将动画附加到其上的方法:

- (void)animateMovingObject:(CALayer*)obj
fromPosition:(CGPoint)startPosition
toPosition:(CGPoint)endPosition
duration:(NSTimeInterval)duration {
CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
pathAnimation.calculationMode = kCAAnimationPaced;
//pathAnimation.fillMode = kkCAFillModeRemoved; // default
//pathAnimation.removedOnCompletion = YES; // default
pathAnimation.duration = duration;

// create an empty mutable path
CGMutablePathRef curvedPath = CGPathCreateMutable();

// set the starting point of the path
CGPathMoveToPoint(curvedPath, NULL, startPosition.x, startPosition.y);

CGPathAddCurveToPoint(curvedPath, NULL,
startPosition.x, endPosition.y,
startPosition.x, endPosition.y,
endPosition.x, endPosition.y);
pathAnimation.path = curvedPath;
[obj addAnimation:pathAnimation forKey:@"pathAnimation"];
CGPathRelease(curvedPath);
}

现在,假设我在棋盘游戏中添加了 3 个层作为子层,并且我进行以下调用:

CALayer obj1 = ... // set up layer and add as sublayer
[self animateMovingObject:obj1
fromPosition:CGPointMake(0.0, 0.0)
toPosition:CGPointMake(100.0, 100.0)
duration:2.0];

CALayer obj2 = ... // set up layer and add as sublayer
[self animateMovingObject:obj2
fromPosition:CGPointMake(0.0, 0.0)
toPosition:CGPointMake(150.0, 100.0)
duration:2.0];

CALayer obj3 = ... // set up layer and add as sublayer
[self animateMovingObject:obj3
fromPosition:CGPointMake(0.0, 0.0)
toPosition:CGPointMake(200.0, 100.0)
duration:2.0];

通过这样做,我只能看到 obj3 从位置 (0.0, 0.0) 移动到 (200.0, 100.0)。我缺少什么?我应该使用 NSOperationQueue/Threads 吗?使用 CAKeyframeAnimation 的 animationDidStart: 委托(delegate)方法在这种情况下似乎没有用。

有什么想法吗?

提前致谢。

最佳答案

如果您想将一系列像这样的动画分组,以便保证它们同步,您可以将它们包装在 CATransaction 中:

[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat:2.0] forKey:kCATransactionAnimationDuration];

// Do animations

[CATransaction commit];

但是,我不太确定为什么您编写的代码没有为每个层触发正确的动画,即使它们没有同步。

请注意,通过将 removedOnCompletion 设置为 YES,您的动画将运行,然后对象将在结束时跳回其起点。您可能希望它为“否”。

关于iphone - 同时在不同层中使用多个 CAKeyframeAnimation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4398111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com