2

そのため、ビューが画面から飛び出し、ユーザーのジェスチャーに基づいて再び飛び出す単純なアニメーションを作成する必要がありました。私のアニメーション コード (以下) は非常にうまく機能します。実際、それは少しうまく機能しすぎています。enterStage メソッドでビューの位置を変更していないことに注目してください。スケールを 1 に設定しただけです。ビューが飛んで、元の位置にうまく巻き付きます。代わりに CGAffineTransformMakeTranslation を実行し、スケールを実行しない場合も完全に機能します。元のサイズと位置を自分で追跡する必要があると思っていましたが、これは少し不気味に行われたようです。

これは謎です。

元のサイズと位置に関するこのデータはどこに保持されていますか? ビューに元の位置を記憶させたくない場合など、必要に応じてこの動作を無効にするにはどうすればよいですか?

-(void) exitStage{

    [UIView animateWithDuration:0.5
                          delay:0
                        options:UIViewAnimationOptionBeginFromCurrentState
                     animations:(void (^)(void)) ^{
                         CGAffineTransform t = CGAffineTransformMakeTranslation(0, -1000);
                         self.transform = CGAffineTransformScale (t, 10.0, 10.0);
                     }
                     completion:^(BOOL finished){
                     }];
}

-(void) enterStage{

    [UIView animateWithDuration:0.5
                          delay:0
                        options:UIViewAnimationOptionBeginFromCurrentState
                     animations:(void (^)(void)) ^{
                         //self.transform = CGAffineTransformMakeTranslation(0, self.originalYcoord);
                         self.transform = CGAffineTransformMakeScale(1,1);
                     }
                     completion:^(BOOL finished){
                     }];
}
4

1 に答える 1

3

アウト トランジションでは、移動を (10,10) に設定しますが、エンター トランジションでは、トランスフォームを 1x1 スケールのトランスフォームに設定します。これには、トランスレーションがまったく含まれていません。

元の変換を維持し、それに変更を加えたい場合は、次のようにする必要があります

self.transform = CGAffineTransformScale(self.transform, 1, 1);
//or
self.transform = CGAffineTransformTranslate(self.transform, 10, 10);
于 2013-03-28T15:41:19.497 に答える