iPhone 回転時にオブジェクトをアニメーションで移動する : Objective-C プログラミング

PROGRAM


iPhone 回転時にオブジェクトをアニメーションで移動する

iPhone を回転させて縦や横にしたときに、UIView に配置されているオブジェクトの位置をアニメーションで移動させるには、UIViewController に搭載されているメソッド "willRotateToInterfaceOrientation:duration:" をオーバーライドして、その中で UIView のアニメーション機能を使用することで、実現できるようでした。

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

{

// アニメーションが必要であれば、アニメーションの開始位置としてマークします。

[UIView beginAnimations:@"orientation" context:NULL];

[UIView setAnimationDuration:0.8f];

 

// 移動対象のテキストフィールドの現在の配置場所を取得します。

CGRect frame = aTextField.frame;

 

// iPhone の向きに応じて配置場所を決定します。

if (UIInterfaceOrientationIsPortrait(interfaceOrientation))

{

// iPhone が縦の場合の配置位置を設定します。

frame.size.width = 198.0f;

}

else

{

// iPhone が横 (UIInterfaceOrientationIsLandscape) の場合の配置位置を設定します。

frame.size.width = 269.0f;

}

 

// 新しい配置位置を、移動対象のテキストフィールドに設定します。

aTextField.frame = frame;

 

// アニメーションの終了位置として確定します。

[UIView commitAnimations];

}

iPhone や iPad の画面レイアウトは、基本的に iPhone や iPad の画面レイアウト で記したようになっているので、これらも踏まえてレイアウトをすることで、任意の場所へコントロールを移動することが可能です。

 

なお、ここでの注意点として、配置やサイズを変更するコントロールに設定されている Autosizing(自動サイズ調整)によっては、ここで設定した配置位置とは別の位置にオブジェクトが移動してしまうことがありました。

配置の仕方にも依るとは思いますけど、指定した配置通りにコントロールを移動させたい場合には、対象となるコントロールの Autosizing 設定を、上と左だけ ON にした状態にするのが良さそうでした。

 

また、ビューの回転の際には、回転によって再レイアウトが必要になるため、UIViewController の "viewWillLayoutSubviews" も呼び出されるようでした。

この時点で UIViewController の interfaceOrientation の値は新しい方向を示しているようでしたので、その値を元にして、適切な配置位置を設定することでも、オブジェクトを移動させることも可能です。

iPhone 本体を回転した際に呼び出されるメソッドとしては、他にも "willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:" や "willAnimateSecondHalfOfRottaionFromInterfaceOrientation:duration:" とがあって、二段階に分けて回転の制御ができるような感じでしたけど、そこまでは今のところ必要がないので、それについてはまだ調べていません。

[ もどる ]