gpt4 book ai didi

ios - 如何在 animationDidStop 中识别 CAShapeLayer

转载 作者:行者123 更新时间:2023-11-28 21:53:02 27 4
gpt4 key购买 nike

我有一个 CAShapeLayer 数组。在某些时候,我必须遍历该数组并为每一层启动动画。这些动画将层的 bounds.size.height 更改为不同的值(以某种方式计算)。在 animationDidStop 方法中,我想实际将每一层的高度更改为 animation.toValue 值。我需要这样做,因为我希望 future 的动画从新值开始,而不是从初始值开始。这是循环:

for (int i=0; i<[layersArray count]; i++) {
newLayerHeight = [self computeNewHeightForLayer:[layersArray objectAtIndex:i];

CABasicAnimation *myAnim = [CABasicAnimation animationWithKeyPath:@"bounds.size.height"];
myAnim.delegate = self;
myAnim.duration = 0.4;
myAnim.removedOnCompletion = NO;
myAnim.fillMode = kCAFillModeForwards;
myAnim.fromValue = [NSNumber numberWithFloat:[layersArray objectAtIndex:i]).bounds.size.height];
myAnim.toValue = [NSNumber numberWithFloat:newLayerHeight];
[[layersArray objectAtIndex:i] addAnimation:myAnim forKey:@"changeHeightAnim"];
}

animationDidStop 方法中,我想做这样的事情(实际上等同于此;if-else 范式不是最好的):

-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
if(flag){
/*
if(anim is linked to layer0)change the height of layer0;
if(anim is linked to layer1)change the height of layer1;
.
.
.
if(anim is linked to layerN-1)change the height of layerN-1;

*/
}
}

有什么想法吗?谢谢。

最佳答案

在遍历图层数组时,为每个 CAShapeLayer 设置的每个动画指定一个特定值,如下所示:

[myAnim setValue:@"layer_1" forKey:@"animation_id"];
[myAnim setValue:@"layer_2" forKey:@"animation_id"];
...

在您的“animationDidStop”方法中,检查动画参数的值,如下所示:

-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
if([[anim valueForKey:@"animation_id"] isEqual:@"layer_1"]) {
// do something
}
else if([[anim valueForKey:@"animation_id"] isEqual:@"layer_2"]) {
// do something
}
}

关于ios - 如何在 animationDidStop 中识别 CAShapeLayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27600547/

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