iPadの登場により、状況は変わりました。 Appleは、すべての開発者がiPadプログラムですべてのデバイスの向きをサポートすることを義務付けています。 当然、たとえばゲームなどの例外が存在する場合があります。 ただし、方向に対する厳密なバインド(機能)を持たないプログラムは、デバイスのどの位置でもユーザーにとって使いやすいはずです。
シンプルなインターフェースで、困難はありません。 UIViewクラスのオブジェクトは、フレームの変更を記述する必要なautoresizingMaskプロパティで設定されます。 複雑なインターフェースの場合、この方法はもはや適切ではありません。
layoutSubviewsメソッドを使用して、プログラムインターフェイスのスムーズで快適な自動回転を作成する方法を説明します。 この方法に関する詳細情報は、 iPadプログラミングガイドで入手できます。 私はその使用の実際の実際的な例を与えるだけです(この点に関してはAppleのドキュメントはけちです)。
これは選択肢の1つですが、彼の仕事の結果は非常に高品質です。 当然、このオプションはiPadおよびiPhone / iPod touchに適しています。
次のポートレートビューとランドスケープ(ランドスケープ)ビューが必要だとします。
最終プロジェクトRotateDemoをすぐに広めます。
そしてビデオ:
iPad(ウィンドウベース)用の基本プロジェクトを作成しましょう。
私はインターフェイス全体をプログラムで行うことに慣れています。 必要に応じて、Interface Builderでマウスのクリックでコードの一部を簡単に置き換えることができます。
クラスファイルContainerView(UIViewから派生)をプロジェクトに追加します。 今のところ空のままにしておきます。 このクラスのオブジェクトは、コントローラー内のすべてのUIViewオブジェクトのコンテナーになります。 このクラスでは、layoutSubviewsメソッドを再割り当てします。
クラスファイルDemoViewController(UIViewControllerから派生)を作成します。
インターフェイスファイルDemoViewController.h:
#import <UIKit/UIKit.h>
#import "ContainerView.h"
@ interface DemoViewController : UIViewController
{
ContainerView *containerView;
}
@end
* This source code was highlighted with Source Code Highlighter .
クラスの実装では、1つの主要なloadViewメソッドのみが重要です。
- ( void )loadView
{
CGRect screenRect = [[UIScreen mainScreen] applicationFrame];
UIView *contentView = [[UIView alloc] initWithFrame:screenRect];
contentView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
contentView.backgroundColor = [UIColor blueColor];
self.view = contentView;
[contentView release];
containerView = [[ContainerView alloc] initWithFrame:CGRectMake(0, 0, screenRect.size.width, screenRect.size.height)];
containerView.backgroundColor = [UIColor blueColor];
containerView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
[self.view addSubview:containerView];
UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button1.frame = CGRectZero;
[button1 setTitle: @"Object 1" forState:UIControlStateNormal];
button1.tag = 1001;
[containerView addSubview:button1];
UIButton *button2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button2.frame = CGRectZero;
[button2 setTitle: @"Object 2" forState:UIControlStateNormal];
button2.tag = 1002;
[containerView addSubview:button2];
UIButton *button3 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button3.frame = CGRectZero;
[button3 setTitle: @"Object 3" forState:UIControlStateNormal];
button3.tag = 1003;
[containerView addSubview:button3];
UIButton *button4 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button4.frame = CGRectZero;
[button4 setTitle: @"Object 4" forState:UIControlStateNormal];
button4.tag = 1004;
[containerView addSubview:button4];
}
* This source code was highlighted with Source Code Highlighter .
ここではすべてが簡単です。 コンテナを作成し、すべての要素をそれに追加します。 この例では、これらは4つのUIButtonボタンにすぎません。 ボタンフレームは関係ありません(layoutSubviewsメソッドで設定されます)。
ContainerViewクラスに戻り、layoutSubviewsメソッドを再定義します。
- ( void )layoutSubviews
{
[super layoutSubviews];
if (self.frame.size.width == 768)
{
UIView *view = [self viewWithTag:1001];
view.frame = CGRectMake(184, 100, 400, 150);
view = [self viewWithTag:1002];
view.frame = CGRectMake(184, 300, 400, 150);
view = [self viewWithTag:1003];
view.frame = CGRectMake(184, 500, 400, 150);
view = [self viewWithTag:1004];
view.frame = CGRectMake(184, 700, 400, 150);
}
else
{
UIView *view = [self viewWithTag:1001];
view.frame = CGRectMake(74, 100, 400, 150);
view = [self viewWithTag:1002];
view.frame = CGRectMake(550, 100, 400, 150);
view = [self viewWithTag:1003];
view.frame = CGRectMake(74, 400, 400, 150);
view = [self viewWithTag:1004];
view.frame = CGRectMake(550, 400, 400, 150);
}
}
* This source code was highlighted with Source Code Highlighter .
この例では、絶対幅との比較を使用しています。 または、ユニバーサルチェックを使用できます。
if (UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation]))
* This source code was highlighted with Source Code Highlighter .
できた デリゲートクラスでコントローラーをアクティブにするだけです。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
controller = [[DemoViewController alloc] initWithNibName:nil bundle:nil];
window.backgroundColor = [UIColor blueColor];
[window addSubview:controller.view];
[window makeKeyAndVisible];
return YES;
}
* This source code was highlighted with Source Code Highlighter .
そのため、向きを変更するときに複雑なインターフェイスを変更するスムーズなアニメーションが得られました。 最小限のコードで、複雑なものはありません。