0

チェーンアニメーションの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]];
                 }];

 }
4

1 に答える 1

0

OK-これは古い質問ですが、私はこの問題を理解しました。これらの画像をY軸を中心に反転させていたので、アニメーション画像のZ位置を変更することができました。startAnimationメソッドに、次を追加しました。

  float pageLevelLayerPosition;
  // logic to set the zposition variable 100 more than anything nearby 

  _originalImageViewZPosition = bigImageView.layer.zPosition;
  [bigImageView.layer setZPosition:pageLevelLayerPosition];

次に、animationDidStopで、関連するコード行を追加して、アニメーションを削除していた0にリセットしました。変数を管理するためのコードがいくつかあったので、その数は近くの何よりも大きいことが保証されました。

3Dアニメーションに入るとしたら、これをもっと厳密に制御する必要があると思いますが、それが私の問題の原因でした。

于 2012-11-30T21:15:49.573 に答える