gpt4 book ai didi

iphone - 使用 CAAnimationGroup 对两个核心动画进行分组会导致一个 CABasicAnimation 无法运行

转载 作者:行者123 更新时间:2023-12-03 18:35:39 27 4
gpt4 key购买 nike

我尝试在 OS 3.1.2 的 iPhone 上的 UILabel 上执行两个动画。第一个来回摇动 UILabel:

CAKeyframeAnimation *rock;
rock = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"];
[rock setBeginTime:0.0f];
[rock setDuration:5.0];
[rock setRepeatCount:10000];

NSMutableArray *values = [NSMutableArray array];
MovingMath *math = [[MovingMath alloc] init];

// Center start position
[values addObject:[math DegreesToNumber:0]];

// Turn right
[values addObject:[math DegreesToNumber:-10]];

// Turn left
[values addObject:[math DegreesToNumber:10]];

// Re-center
[values addObject:[math DegreesToNumber:0]];

// Set the values for the animation
[rock setValues:values];

[math release];

第二个缩放 UILabel,使其变得更大:

NSValue *value = nil;
CABasicAnimation *animation = nil;
CATransform3D transform;
animation = [CABasicAnimation animationWithKeyPath:@"transform"];
transform = CATransform3DMakeScale(3.5f, 3.5f, 1.0f);
value = [NSValue valueWithCATransform3D:transform];
[animation setToValue:value];
transform = CATransform3DMakeScale(1.0f, 1.0f, 1.0f);
value = [NSValue valueWithCATransform3D:transform];
[animation setFromValue:value];
[animation setAutoreverses:YES];
[animation setDuration:30.0f];
[animation setRepeatCount:10000];
[animation setBeginTime:0.0f];

将这些动画之一直接添加到 UILabel 层即可按预期工作。

但是,如果我尝试将动画分组在一起,第一个“摇摆”动画将不起作用:

CAAnimationGroup *theGroup = [CAAnimationGroup animation];

theGroup.duration = 5.0;
theGroup.repeatCount = 10000;
theGroup.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
theGroup.animations = [NSArray arrayWithObjects:[self rockAnimation], [self zoomAnimation], nil]; // you can add more

// Add the animation group to the layer
[[self layer] addAnimation:theGroup forKey:@"zoomAndRotate"];

将动画添加到组中的顺序并不重要。我没有按照上面的方式进行缩放,而是尝试更改边界,但这也没有成功。任何见解将不胜感激。谢谢。

最佳答案

您正在尝试同时对一个属性(即 CALayer 的变换)进行两项更改。在第一个动画中,您使用辅助关键路径来更改变换以产生旋转,而在第二个动画中,您将直接更改变换以产生缩放。第二个动画将覆盖第一个动画,因为您正在构建仅在它们之间进行缩放和动画的整个变换。

看来,您可以通过对两个动画使用辅助键路径来实现图层的缩放和旋转。如果您将缩放动画上的代码更改为读取

CABasicAnimation *animation = nil;
animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
[animation setToValue:[NSNumber numberWithDouble:3.5]];
[animation setFromValue:[NSNumber numberWithDouble:1.0]];
[animation setAutoreverses:YES];
[animation setDuration:30.0f];
[animation setRepeatCount:10000];
[animation setBeginTime:0.0f];

您应该能够在图层上进行摇摆和缩放。

关于iphone - 使用 CAAnimationGroup 对两个核心动画进行分组会导致一个 CABasicAnimation 无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2120068/

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