0

UIView animation に関する Ray のチュートリアルでは、次のコードは、ピクニック バスケットの上部と下部を開き、その下にあるものを表示する作業を行っているように見えます。

- (void)viewDidAppear:(BOOL)animated
{

    CGRect basketTopFrame = self.basketTop.frame;
    basketTopFrame.origin.y = -basketTopFrame.size.height;

    CGRect basketBottomFrame = self.basketBottom.frame;
    basketBottomFrame.origin.y = self.view.bounds.size.height;

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationDelay:1.0];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

    self.basketTop.frame = basketTopFrame;
    self.basketBottom.frame = basketBottomFrame;

    [UIView commitAnimations];
}

これは、basketFooFrame.origin.y がバスケット要素が移動する正または負の距離であるように見えます。これは、「目的地の座標を設定すると、例が実行されます」というアプローチを定義するものとして読む必要がありますか?

上記のトリックよりも詳細なアニメーションを目指しています。UIViewには特定のx、y、高さ、幅、および回転があり、イージングを使用してアニメーション化し、水平および垂直に中央に配置し、ビューポートからマージンを引いた高さにし、回転してデフォルトに戻したい向きにします (クリックすると前の状態に戻ります)。

上記のコードのより精巧なコピーを作成することで、必要なものを取得できますか?

前もって感謝します、

4

1 に答える 1

1

UIKit のアニメーションは、ほとんど「設定して忘れる」ものです。ただし、ある場所に行ってから開始した場所に戻るようなことをしている場合は、「ポイント 0,0 からポイント 0 に移動し、 0 からポイント 20,20 まで」 「ポイント 20,20 に移動し、終了したらポイント 0,0 に移動」と言う必要があります。例:

#import <CoreGraphics/CoreGraphics.h>

#define degreesToRadians(x) (M_PI * x / 180.0)

// ...

[UIView animateWithDuration:.25 animations:^{
  CGAffineTransform t = CGAffineTransformIdentity;
  CGAffineTransformScale(t, 2.0, 2.0);
  CGAffineTransformRotate(t, degreesToRadians(45));

  myview.transform = t;

} completion:^(BOOL finished){
    NSLog(@"step 1 done");

    [UIView animateWithDuration:.25 animations:^{

      myview.transform = CGAffineTransformIdentity;

    } completion:^(BOOL finished) {

      NSLog(@"step 2 done");

    }];

}];
于 2013-10-04T13:31:09.970 に答える