[英]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.