iPhone旋转时更改视图?

时间:2012-06-19 00:47:51

标签: objective-c ios xcode

当iPhone处于标准“纵向”方向时,我如何才能看到一个视图,并在旋转到横向时切换到不同的视图(例如图形或其他东西),反之亦然?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

首先阅读UIViewControllers的工作原理: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html

然后,在您的UIViewController子类中,利用willRotateToInterfaceOrientation:duration:更改您的视图。

e.g。

- (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案例,以确定要执行的操作。