これはおもしろい…こうすることで
CABasicAnimation* a = [CABasicAnimation animationWithKeyPath:@"opacity"];
a.fromValue = [NSNumber numberWithFloat:0.];
a.toValue = [NSNumber numberWithFloat:1.];
a.duration = .4;
a.fillMode = kCAFillModeBoth;
a.removedOnCompletion = NO;
CGFloat timeOffset = 0;
for(CALayer* layer in layers)
{
a.beginTime = [someCommonSuperView.layer convertTime:CACurrentMediaTime()fromLayer:nil] + timeOffset;
[layer addAnimation:a forKey:nil];
timeOffset += .4;
}
私は実際には常に同じCABasicAnimationのbeginTimeを変更し、その参照カウントを増やしています。一連のレイヤーが次々にフェードインするのではなく、すべてのレイヤーの開始時刻を台無しにして、最後のレイヤーの時点ですべてのレイヤーが一度に表示されるようにする必要があります。しかし、上記のコードは、レイヤーが順番にフェードインするという点で実際に機能しているようです。
では、このようにアニメーションを再利用することは理にかなっていますか?パスごとに新しいインスタンスを作成しないようにするには?
addAnimationは、参照数を増やすのではなく、実際にアニメーションのディープコピーを作成していますか?