gpt4 book ai didi

ios - 动画期间未调用 CALayer setPosition

转载 作者:行者123 更新时间:2023-11-29 04:03:07 26 4
gpt4 key购买 nike

我有一个自定义CALayer,我使用CAAnimationGroup对其进行动画处理,以遵循路径并以与路径相切的方式旋转:

   // Create the animation path
CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
pathAnimation.calculationMode = kCAAnimationPaced;
pathAnimation.fillMode = kCAFillModeForwards;
pathAnimation.removedOnCompletion = NO;

//Setting Endpoint of the animation
CGRect contentBounds = [self contentBounds];
self.boatLayer.bounds = contentBounds;
CGPoint endPoint = CGPointMake(contentBounds.size.width - 150, contentBounds.size.height - 150);

CGMutablePathRef curvedPath = CGPathCreateMutable();
CGPathMoveToPoint(curvedPath, NULL, startPosition.x, startPosition.y);
CGPathAddCurveToPoint(curvedPath, NULL, endPoint.x, 0, endPoint.x, 0, endPoint.x, endPoint.y);
pathAnimation.path = curvedPath;

pathAnimation.duration = 10.0;
pathAnimation.rotationMode = kCAAnimationRotateAuto;
pathAnimation.delegate = self;

// Create an animation group of all the animations
CAAnimationGroup *animationGroup = [[[CAAnimationGroup alloc] init] autorelease];
animationGroup.animations = [NSArray arrayWithObjects:pathAnimation, nil];
animationGroup.duration = 10.0;
animationGroup.removedOnCompletion = NO;

// Add the animations group to the layer (this starts the animation at the next refresh cycle)
[testLayer addAnimation:animationGroup forKey:@"animation"];

我需要能够跟踪图层沿着路径前进时的位置和旋转的变化。我已经覆盖了 setPositionsetTransform (调用 super setPositionsuper setTranform),然后记录它们的值。这两个值似乎都没有在动画过程中设置。

如何在 CALayer 类本身动画时获取位置和旋转更新?

最佳答案

核心动画不是这样工作的

对不起。这不是核心动画的工作原理。当您将动画添加到图层时,它不会更改该图层的模型。仅演示。

当您将动画配置为在完成后不自行删除时

yourAnimation.fillMode = kCAFillModeForwards;
tourAnimation.removedOnCompletion = NO;

您实际上导致了屏幕上显示的内容与该层模型之间的不一致。例如,如果您有一个像这样设置动画的按钮,您会因为它“不再响应触摸器”或更有趣的“响应来自其‘旧’位置的触摸”而感到非常惊讶/愤怒。

半解决方案

根据您实际需要更新的内容和频率,您可以在动画期间定期检查 presentationLayer 的值,或者使用 CADisplayLink 在动画播放时运行一些代码屏幕发生变化。

关于ios - 动画期间未调用 CALayer setPosition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15618517/

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