gpt4 book ai didi

iphone - 强制CALayer的旋转方向?

转载 作者:行者123 更新时间:2023-12-03 18:54:23 26 4
gpt4 key购买 nike

这个让我发疯......

考虑到“plane”是一个 CALayer,我在 X 轴上旋转它:

plane.transform = CATransform3DMakeRotation(180 * M_PI / 180.0f, 1.0f, 0.0f, 0.0f);

这使它顺时针旋转,这是完美的。

现在,在某个时间点,我希望它返回到 0 度,所以我使用:

plane.transform = CATransform3DMakeRotation(0 * M_PI / 180.0f, 1.0f, 0.0f, 0.0f);

问题是......它是逆时针方向的,这不是我想要的:(

我猜它使用最短的旋转路径,但即使我告诉它转到 360 度,当它完成并告诉它重新启动动画时,它会从 360 度开始到 180 度,并且它倒退而不是正确的方向。

有办法解决这个问题吗?

我在Actionscript中要做的事情是:

if (plane.rotationX == 360) plane.rotationX = 0;

它会很好地恢复,但如果我使用 CATransform3DMakeRotation 这样做,两个转换都会发生冲突,因为动画(我认为)并且它会变得困惑。

任何帮助将不胜感激!

谢谢

最佳答案

当我寻找解决类似问题时出现了这个问题。我想将图像旋转 180 度,然后想继续旋转一个完整的空翻。 iOS想要走最短路线回去。这里的答案对我没有太大帮助。我最终查找了一些有关 keyPath 动画的内容,这解决了我的问题。下面是该方法的示例。

对于问题中提出的特定问题,您需要两组不同的 keyFrameValues,一组用于初始旋转,另一组用于第二个旋转。但是通过输入中间值,您可以获得所需的效果,即采用更长的路径或强制选择同等长的路径,如果这是您想要的。我在注释中留下了一些变体代码,因为它们可以帮助不熟悉 CAKeyFrameAnimation 的人遵循代码/理解选项范围。

- (void) somersault;
{

CALayer* layer = [self layer];
NSMutableArray* keyFrameValues = [NSMutableArray array];
[keyFrameValues addObject:[NSNumber numberWithFloat:0.0]];
//[values addObject:[NSNumber numberWithFloat:M_PI*0.5]];
[keyFrameValues addObject:[NSNumber numberWithFloat:M_PI]];
[keyFrameValues addObject:[NSNumber numberWithFloat:M_PI*1.5]];
[keyFrameValues addObject:[NSNumber numberWithFloat:M_PI*2.0]];

CAKeyframeAnimation* animation = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
[animation setValues:keyFrameValues];
[animation setValueFunction:[CAValueFunction functionWithName: kCAValueFunctionRotateX]];// kCAValueFunctionRotateZ]];

[animation setDuration:0.9];
//[animation setTimingFunction: [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];

[layer addAnimation:animation forKey:nil];

return;
}

关于iphone - 强制CALayer的旋转方向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3251388/

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