0

我已经用 iOS 5.0 开始了我的项目,现在更新到 iOS 6,我在做定位时遇到了问题,为了测试我已经创建了一个示例应用程序,并在委托中添加了以下代码......

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    return UIInterfaceOrientationMaskAll;
}

在我的视图控制器中,我实现了以下方法......

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscape;
}

-(BOOL)shouldAutorotate
{
    return YES;
}

以上所有我在谷歌搜索iOS 6.0之后所做的一切,当我加载应用程序时,基于supportedInterfaceOrientations视图中给出的选项加载很好,现在当我改变我的设备方向时......视图在运行时没有相应地改变,如何根据设备方向更改视图?

NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[notificationCenter addObserver:self
                       selector:@selector(deviceOrientationDidChange) 
                           name:UIDeviceOrientationDidChangeNotification object:nil];

我是否需要像上面一样添加观察者并以编程方式对其进行更改?还是会通过检测设备方向自动更改视图?

4

3 回答 3

4

尝试这个

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAll;
}


- (BOOL) shouldAutorotate {
    return YES;
}


- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationLandscape;
}

之前的代码应该可以在 iOS6 上运行

无论如何,我在我的一个项目中使用了这段代码。我有一个布尔值_firstTime,我YES在显示之前将其设置为viewController,然后在出现NO之后将其更改为viewController

- (NSUInteger)supportedInterfaceOrientations {
    if (_firstTime) {
        return UIInterfaceOrientationMaskLandscape;
    } else {
        return UIInterfaceOrientationMaskAll;
    }

}

- (BOOL) shouldAutorotate {

        return YES;

}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if (_firstTime) {
        return return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft)||(interfaceOrientation == UIInterfaceOrientationLandscapeRight);
    } else {
        return YES;
    }
}
于 2013-01-02T10:45:57.083 回答
1

改变这些方法:

-(NSUInteger)supportedInterfaceOrientations
{
  return UIInterfaceOrientationMaskAll;
}

注意:无需添加observerdevice notification鉴于以下方法将指定方向状态

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

编辑:根据您的意愿提供您的所有views意愿automaskingrequirement

编辑:如果使用,UINavigation Controller那么它的child View Controller's supportedInterfaceOrientationsandshouldAutorotate方法将不会called

参考这个链接。

于 2013-01-02T10:33:57.890 回答
0

问题出在我的 iPad 上。它有一个按钮来限制自动旋转更改...我最初并不知道,因为我完全使用 iPod.. 谢谢大家的帮助。

于 2013-01-02T12:52:17.853 回答