3

私が作っているアプリでは、ボタンをオフスクリーンで開始してオンスクリーンに移動しようとしています。画面外のボタンから開始する方法がわかりませんが、それがわかれば、次のコードのようなことができることがわかります。

[UIView beginAnimation:@"animate" context: nil];
[UIView setAnimationDuration:3];
self.myButton.frame = CGRectMake (20, 100, 40, 80);
//Other animations
[UIView commitAnimations];

さらに、行[UIView beginAnimation:@"animate" context:nil];で、コンテキスト パラメータは CGContextRef を要求していますか?

4

3 に答える 3

5

ボタンを画面外から画面上にアニメーション化する方法を尋ねていると思います。これを行うには、ボタンの原点位置を画面外にある座標に設定するだけです。

self.myButton.frame = CGRectMake(-80, 100, 40, 80);

これが完了したら、投稿したコードを使用して画面にアニメーションを表示できます。ボタンは最初の位置から 2 番目の位置に移動することに注意してください。つまり、使用した座標を使用すると、ボタンは y 位置を変更せずに左側から画面に移動します。ボタンを画面の外に置くほど、setAnimationDuration で割り当てられた時間内に画面に表示されるまでの速度が速くなることに注意してください。

左から画面にアニメーション化するには

self.myButton.frame = CGRectMake(-80, 100, 40, 80);
// begin animation block    
[UIView beginAnimations:@"animate" context: nil];
[UIView setAnimationDuration:3];
self.myButton.frame = CGRectMake (20, 100, 40, 80);
// commit frame changes to be animated
[UIView commitAnimations];

また、ボタンが以前に画面に表示されていた場合、そのコードが使用されると、画面からテレポートして戻ってくるように見えます。

ああ、コンテキストに関する質問に答えるには、CGContextRef である必要はありません。任意のデータ型にすることができます (プリミティブではなくオブジェクトである限り)。基本的には、アニメーションが発生したときにデリゲートに渡されるデータです。

于 2012-05-29T00:49:22.537 に答える
3

BeginAnimation:context:iOS 4.0以降では推奨されていません。ブロックベースの方法のいずれかを使用する必要があります(BeginAnimation:context:)。画面外になるように元のフレームを設定する必要があります。少し遅れてボタンを右から移動する例を次に示します。

self.myButton.frame = CGRectMake (340, 250, 40, 80);
    [self.view addSubview:myButton];
    [UIView animateWithDuration:5 delay:.2 options: UIViewAnimationOptionLayoutSubviews animations:^{
    self.myButton.frame = CGRectMake (140, 250, 40, 80);
    //Other animations
    }
     completion:nil];
于 2012-05-29T00:56:19.180 に答える
2

xibsを使用していない場合は、ボタンのフレームをオフスクリーンに設定できますviewDidLoad(xibsを使用している場合は、ビューからスライドさせて外します)。

 //create the button or get it from the xib
 CGRect rect = self.myButton.frame;
 rect.origin.x=-200;//or a good point to hide the button
 self.myButton.frame=rect;

次に、ボタンをアニメーション化する場合は、ブロックアニメーションを使用できます。

 [UIView animateWithDuration:0.3f delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
        self.myButton.frame=SET_YOUR_FRAME;
    } completion:^(BOOL finished)];

コンテキストについては、ドキュメントを参照してください

于 2012-05-29T00:58:51.877 に答える