1

iPhone が標準の「縦」の向きにあるときに 1 つのビューを表示し、横向きに回転したときに別のビュー (グラフなど) に切り替えるにはどうすればよいでしょうか。

4

2 に答える 2

3

そのビューの方向を無効にします (最初のビューが横向きであると仮定します)

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{

    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft)||(interfaceOrientation == UIInterfaceOrientationLandscapeRight); }

次に、これをviewDidAppearに追加します

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter]
 addObserver:self selector:@selector(orientationChanged:)
 name:UIDeviceOrientationDidChangeNotification
 object:[UIDevice currentDevice]];

そして、このメソッドをどこかに追加します

- (void) orientationChanged:(NSNotification *)note
{
    UIDevice * device = note.object;
    switch(device.orientation)
    {
        case UIDeviceOrientationPortrait:
            // Present View Controller here
            break;
        default:
            break;
    };
}

もう一方のビューでも同じことを行いますが、ポートレートの現在の代わりにランドスケープの却下を逆にします。

通知の登録を忘れずに解除してください。

(または、両方のコントロールを備えたナビゲーション ビューを使用しますが、バーは使用せず、使用する向きに応じて必要なものを表示します)

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
                                         duration:(NSTimeInterval)duration
于 2012-06-19T00:56:57.943 に答える
1

最初に UIViewController の仕組みを読んでください: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html

次に、UIViewController サブクラスで、 を利用willRotateToInterfaceOrientation:duration:してビューを変更します。

例えば

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{
    // if portrait
    [self.landscapeView removeFromSuperview];
    [self.view addSubview:self.portraitView];

    // if landscape
    [self.portraitView removeFromSuperview];
    [self.view addSubview:self.landscapeView];
}

そして、適切なifステートメントまたはswitchケースを追加して、どちらを行うかを決定します。

于 2012-06-19T00:52:58.157 に答える