チェーンアニメーションの1つに奇妙な問題があります。画面上の各ブロック(そのうち26個)にブロックオブジェクトがあり、ユーザーがそれらを押すと、フリップを実行します。うまく機能しますが、画面上で約50%大きくするために、これらを実行する前にスケールアニメーションを追加しています。だから、私のシーケンスは次のとおりです。
遅延を拡大(ユーザーに大きな画像を表示させる)スピンアウト90%(ブロックをビューから削除)-transform.rotation.yを使用して画像を変更し、スピンイン縮小します。
これらのブロックのデリゲートになるようにウィンドウビューコントローラーを設定しました。これにより、ブロックにカウンターを渡すことができるため、(setZpositionを使用して)右側のサブレイヤーを上部に配置できます。
画面上で2つのブロックを上下に配置して、拡大するとそれらが重なるようにし、スピンアウトアニメーションを開始すると、すぐに右側が表示されることを除いて、すべてうまく機能します。その下のブロックの後ろにあるブロックポップ。アニメーションをtransform.rotation.xに変更してみましたが、ブロックが左右に並んでいるときに同じ動作が得られます。
それがiOSのバグなのか、何か正しいことをしていないだけなのかはわかりません。どんな提案でも大歓迎です。スピンアウト方法は次のとおりです。
- (void)spinOut:(id)sender
{
NSTimeInterval animationTime=0.85;
[UIView animateWithDuration:animationTime
delay:0
options: UIViewAnimationOptionCurveLinear
animations:^{
// setup the animation to spin the current view out
[CATransaction begin];
[CATransaction setDisableActions:YES];
CABasicAnimation *spinOut = [CABasicAnimation animationWithKeyPath:@"transform.rotation.y"];
[spinOut setDelegate:self];
[spinOut setDuration:animationTime];
CAMediaTimingFunction *tf = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
[spinOut setTimingFunction:tf];
[spinOut setFromValue:[NSNumber numberWithFloat:M_PI * 0.0]];
[spinOut setToValue:[NSNumber numberWithFloat:M_PI * 0.5]];
[spinOut setRemovedOnCompletion:NO];
[spinOut setFillMode:kCAFillModeForwards];
// setup variables used to roll in the next view on animation completion.
[pageView.layer addAnimation:spinOut forKey:kMyVeryOwnABCsSpinOutKey];
[CATransaction commit];
}
completion:^(BOOL finished){
[self setFlipOutAnimationTimer:[NSTimer scheduledTimerWithTimeInterval:animationTime target:self selector:@selector(spinIn:) userInfo:nil repeats:NO]];
}];
}