簡體   English   中英

如何在animationDidStop中識別CAShapeLayer

[英]How to identify CAShapeLayer within the animationDidStop

我有一個CAShapeLayer數組。 在某些時候,我必須遍歷該數組並為每個圖層啟動動畫。 這些動畫將圖層的bounds.size.height更改為不同的值(以某種方式計算)。 animationDidStop方法中,我想將每一層的高度實際更改為animation.toValue值。 我需要這樣做,因為我希望將來的動畫從新值開始,而不是從初始值開始。 這是循環:

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”方法中,檢查animation參數的值以獲取該值,如下所示:

-(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
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM