2

こんにちは私はCGAffineTransformアニメーションと完全に混乱しています。私がやりたいのは、スプライトを右側の位置から左側の位置に移動することだけです。停止したら、「リセット」します。つまり、開始した場所に戻します。アプリが(マルチタスクで)終了した場合、開始時に位置を再度リセットして、アニメーションを繰り返します。

これは私がアニメーションを作るために使っているものです。

    [UIImageView animateWithDuration:1.5
                                   delay:0.0 
                                 options:(UIViewAnimationOptionAllowUserInteraction |
                                          UIViewAnimationOptionCurveLinear 
                                          )
                              animations:^(void){

                                  ufo.transform = CGAffineTransformTranslate(ufo.transform, -270, 100);

                              }
                              completion:^(BOOL finished){
                                  if(finished){
                                      NSLog(@"ufo finished");

                                      [self ufoAnimationDidStop];
                                  }
                              }];

私が理解しているように、CGAffineTransformsは、スプライトを視覚的に移動したように見せますが、実際には移動しません。したがって、私が使用して位置を「リセット」しようとすると

ufo.center = CGPointMake(355、70);

何もしません。

私が電話すれば、私は何かが機能しています

ufo.transform = CGAffineTransformTranslate(ufo.transform、270、-100);

リセットします。問題は、アニメーションの途中でアプリを終了した場合、再起動したときに必ずしも最初から開始されるとは限らず、適切な場所に移動しないため、基本的にクレイジーになります。

適用された変換を削除する方法はありますか?タイマーだけを使うことを考えていますが、この方法がうまくいくのはばかげているようです。私はこれにしばらく苦労してきたので、どんな助けでも大歓迎です。

ありがとう

4

1 に答える 1

4

ビューに変換を適用しても、実際にはビューの中心や境界は変更されません。画面に表示されるビューの表示方法を変更するだけです。変換をCGAffineTransformIdentityに戻し、「正常」に見えるようにします。アニメーションを開始する前に設定し、アニメーション化する対象に設定することができます。

于 2010-11-22T22:12:20.913 に答える