gpt4 book ai didi

objective-c - 多个 CALayers 动画 - 填充模式

转载 作者:太空狗 更新时间:2023-10-30 03:43:28 26 4
gpt4 key购买 nike

我将屏幕分成小块,然后为每个 block 设置动画以执行过渡:

    for (int x=0; x<number_of_x_splits; x++) {

for (int y=0; y<number_of_y_splits; y++) {

CGSize splitSize = CGSizeMake(screenBounds.width / number_of_x_splits, screenBounds.height / number_of_y_splits);

CATransformLayer *transformLayer = [CATransformLayer layer];
[transformLayer setFrame:CGRectMake(splitSize.width * x, splitSize.height * y, splitSize.width, splitSize.height)];
[transformLayer setPosition:CGPointMake((splitSize.width * x) + splitSize.width / 2, (splitSize.height * y) + splitSize.height / 2)];

... adding some sublayers to transformLayer...

CABasicAnimation *rotate = [CABasicAnimation animationWithKeyPath:@"transform.rotation.y"];
[rotate setDuration:5.0];
[rotate setFromValue:[NSNumber numberWithFloat:0]];
[rotate setToValue:[NSNumber numberWithFloat:M_PI]];
[rotate setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[rotate setTimeOffset:(1 / (number_of_x_splits + number_of_y_splits)) * (x+y)];
[rotate setFillMode:kCAFillModeForwards];
[rotate setRemovedOnCompletion:NO];
[transformLayer addAnimation:rotate forKey:@"transform.rotation.y"];

}
}

问题是只有链中的最后一个 CALayer 保留在最终位置。我还尝试设置 CALayer 最终转换值:

[transformLayer setTransform:CATransform3DMakeRotation(M_PI, 0, 1, 0)];

我想这与在循环中创建另一个 CALayer 实例重置前一层的属性有关。

有人建议如何补救这种情况吗?

最佳答案

timeOffset 不是您要使用的属性,它实际上会在动画开始的时间点发生变化,而不是开始前的延迟。相反,您应该设置动画的 beginTime

记住开始时间应该是 CACurrentMediaTime() + yourDelay


timeOffset 和 beginTime 之间的区别可以这样说明。我知道我以前看过这个插图,只是找不到了。

Normal animation    | 12345678 |
Begin time | 12345678 |
Time offset | 5678 |

关于objective-c - 多个 CALayers 动画 - 填充模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11625679/

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