This repository has been archived by the owner on Jun 20, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 336
2.4 Supporting Multiple Interface Orientations
tamotamago edited this page Apr 17, 2013
·
19 revisions
View Controller Programming Guide for iOS
Source:View Controller Programming Guide for iOS
iPhone の複数の向きに対応する方法を説明します。
まずアプリを作成する前に、
- このアプリはどの方向に対応させるのか
- 回転対応する場合、どの画面を回転対応させるのか
- 回転中のアニメーションはどうするのか を考えましょう。
回転対応させる方法は大きく分けて二つあります。
- ViewController 内で回転時に再レイアウトする
- Portrait 用 Landscape 用の二つの ViewController を用意する
下の完成系を目指します。
|
Source:View Controller Programming Guide for iOS
- プロジェクトファイルの summary でサポートする回転を設定
- 回転させたい ViewController で回転宣言
注意 : iOS6 と iOS5 以前では大きく挙動が変わります。
- iOS6
// [1] rootViewController から回転通知が各 ViewController に通達される
// 各 ViewController は自身が回転に対応するかどうかを返答する
//only iOS6 書かなくても project summary で設定している方向に回転する(plist 優先)
-(NSUInteger)supportedInterfaceOrientations
{
NSLog(@"rotate support on ios6");
return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscape;
}
- iOS5 以前
// only iOS5 and earlier
// 書いていないと回転対応できない。project summary (plist) で宣言していなくても回転する
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
NSLog(@"rotate support on ios5 and earlier");
if ((toInterfaceOrientation == UIInterfaceOrientationPortrait)
|| (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft)
|| (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight))
{
return YES;
}
return NO;
}
// [2] view の描画
-(void)viewWillLayoutSubviews
{
NSLog(@"will layout subviews");
}
// [3] 回転前処理
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
duration:(NSTimeInterval)duration
{
NSLog(@"will rotate");
}
// [4] 回転する場合任意のアニメーションをここで設定
-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
duration:(NSTimeInterval)duration
{
NSLog(@"will animate");
if (toInterfaceOrientation == UIInterfaceOrientationPortrait) {
[_blueView setFrame:kPortraitBuleViewRect];
[_yellowView setFrame:kPortraitYellowViewRect];
} else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight
|| toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft)
{
[_blueView setFrame:kLandscapeBuleViewRect];
[_yellowView setFrame:kLandscapeYellowViewRect];
}
}
// [5] 回転完了処理
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
NSLog(@"did rotate");
}
はじめに
-
導入
-
1.3 UIViewController1 UIViewController のカスタマイズ(xib, autoresizing)
-
UIKit 1 - container, rotate-
-
UIKit 2- UIView -
-
UIKit 3 - table view -
-
UIKit 4 - image and text -
-
ネットワーク処理
-
ローカルキャッシュと通知
-
Blocks, GCD
-
設計とデザインパターン
-
開発ツール
-
テスト
-
In-App Purchase
-
付録