0

既存の iPhone アプリを iPad アプリ用に変換しています。iPhone アプリは、行の選択に基づいてカスタム ビュー コントローラー (UIViewController) をプッシュするカスタム ビュー コントローラー (UITableViewController) を最初にユーザーに提示するコンテナー ビュー コントローラー (UINavigationController) を使用して構築されました。

iPad アプリでは、ユーザーにカスタム UIViewController (コンテナー コントローラーなし) を直接提示し、UIPopoverController を介してさまざまなオプションを選択できるようにしています。myAppDelegate.m では、以下を使用してカスタム UIViewController をウィンドウに追加するだけです。

[window addSubview:[myCustomViewController view]];

myCustomViewController.m では、viewWillAppear で方向変更通知を登録することにより、デバイスの回転に大きく基づいてビューを変更しています。

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(didRotate:)                                                  name:@"UIDeviceOrientationDidChangeNotification" object:nil];
}

次に、didRotate: メソッドで方向をテストしており、非常に奇妙な結果が得られています。ビューをロードするだけで3回呼び出されていますか? また、ビューの前の図面に対応する方向を報告しているようですか?

- (void) didRotate:(NSNotification *)notification
{   
    if (self.interfaceOrientation == UIInterfaceOrientationPortrait) {
        NSLog(@"Portrait");
    } else if (self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft || self.interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
        NSLog(@"Landscape");
    }
}

私はドキュメントを読んでいましたが、ウィンドウにサブビューを追加しても(コンテナクラスなしで)viewWillAppear:メソッドが呼び出されないようですが、私の場合は信頼できないだけで呼び出されているようです。

このアプリに使用する必要がある他のパターンはありますか? 単一のカスタム ビューをロードし、2 つのポップオーバー コントローラーを使用したいだけです (他のナビゲーションはありません)。

-デリック

ところで、カスタム viewController をアプリ デリゲートの UINavigationController にプッシュした場合とまったく同じように動作します。このアプリにはナビコントローラーは必要ありません。

4

1 に答える 1

0

私が取り組んでいる私のアプリでは、最初にデバイスが iPad であるかどうかを調べるためのプロパティがあります。

- (BOOL)iPad {

    return UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? YES : NO;
}

次に、ビューの次のデリゲート メソッドを使用できます。

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

if (self.iPad) {
    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || 
        toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
    //do some stuff 
    }   

}

お役に立てれば。

于 2011-04-16T16:08:56.967 に答える