iOS 方向更改也不起作用 UIDeviceOrientationDidChangeNotification 未收到

Posted

技术标签:

【中文标题】iOS 方向更改也不起作用 UIDeviceOrientationDidChangeNotification 未收到【英文标题】:iOS orientation change not working also UIDeviceOrientationDidChangeNotification not received 【发布时间】:2012-05-21 09:27:49 【问题描述】:

我对 ios 还是很陌生,我正在拼命尝试在我的应用程序中进行方向更改。经过研究,这是我的工作:

在我的应用程序中,我有一个 NavigationController 管理七个 UIViewController 子类。

在项目摘要选项卡中,我激活了所有 4 个设备方向。

每个 UIViewcontroller 子类都有一个 xib 文件,所有 xib 文件都激活了“autoresize subviews”。

UIViewController 子类都有:

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

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

他们也都有:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

和:

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

使用 NSLog(...) 语句实现(从不打印,调试器也从不进入这些方法)。

我也在尝试使用:

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

BOOL getOrientationUpdates = [[UIDevice currentDevice] isGeneratingDeviceOrientationNotifications];
NSLog(@"will receive orientation notifications: %@", getOrientationUpdates?@"YES":@"NO");

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

-(void)orientationChanged: (NSNotification*) notification NSLog(@"orientationChanged");

[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications]; [[NSNotificationCenter defaultCenter] removeObserver:self]; 分别。

当我在 AppDelegate 的 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中执行 beginGeneratingDeviceOrientationNotifications 等时,orientationChanged: 在启动时被调用一次,但再也不会旋转设备,当我在 UIViewController 子类之一中执行此操作时,它永远不会被调用!

到目前为止,我想要实现的只是获取方向通知以旋转 UIImageView 和 UIImage(在不同方向上没有任何布局更改)。

UIDeviceOrientation o = [UIDevice currentDevice].orientation;

总是返回UIDeviceOrientationPortrait

可能是我错过了文档或 *** 中的某些内容,但我显然无法弄清楚我需要做什么/添加才能使其在我的设置中正常工作。我对***还是很陌生,所以我希望我的帖子没有违反任何平台约定。

非常感谢任何帮助/提示。非常感谢!

编辑: getOrientationUpdates 始终为 YES,这对我来说很奇怪,因为当我旋转通知回调选择器时,它永远不会被调用!

编辑:在我正在做的 AppDelegate 的 didFinishLaunchingWithOptions 中:

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.regScreenController = [[RegistrationScreenController alloc] initWithNibName:@"RegistrationScreenController" bundle:nil];

navCtrl = [[UINavigationController alloc]initWithRootViewController:self.regScreenController];

[navCtrl setNavigationBarHidden:YES];
self.window.rootViewController = self.regScreenController;
[self.window addSubview:navCtrl.view];
[self.window makeKeyAndVisible];
return YES;

【问题讨论】:

【参考方案1】:

查看您是否在AppDelegate's didFinishLaunchingWithOptions: 方法中设置self.window.rootViewController,因为如果您只向窗口添加子视图,则不会触发方向更改通知。

【讨论】:

感谢您的回答!如果您查看我的编辑,我正在设置 rootViewController,我是否以错误的方式进行操作,可能与 UINavigationController 有关?仍然坚持我所缺少的...... 或者换一种说法:如果问题与 rootViewController 相关,如果 UINavigationController 是使用 rootViewController 初始化的,并且我将 UINavigationController 设置为窗口的子视图,那么设置 UINavigationController 是否正确rootViewController 作为窗口的 rootViewController 或者在这里连接事物以获得方向更改通知的正确方法是什么?非常感谢 我不这么认为,你不应该在窗口中添加任何子视图。只需设置 rootViewController,层次结构中的其他所有内容都应该从 rootViewController 开始,即使它是 UINavigationController,但绝对不会将子视图添加到窗口中。 再次感谢。我在调用 addSubview 时评论了这一行,因此我不再按照您的建议设置子视图,并且我将 navCtrl 本身设置为带有self.window.rootViewController = navCtrl; 的 rootViewController。行为仍然没有变化,没有触发方向变化的通知或回调:(我在 didFinishLaunchingWithOptions 中仍然做错了吗?有什么想法吗?我需要继承 UINavigationController 并将其注册为方向通知接收器吗?我在这将是必要的文件.. 最快的检查是创建一个全新的项目,看看它是否有效,然后看看是否与您的某个地方有区别。还要确保 rootViewController(或里面的那个)正确实现shouldAutorotateToInterfaceOrientation:。无论如何,没有什么比你做的更多的特定配置......

以上是关于iOS 方向更改也不起作用 UIDeviceOrientationDidChangeNotification 未收到的主要内容,如果未能解决你的问题,请参考以下文章

更改方向IOS后视图边界不更新

即使我在设计器中更改了高度,组合框下拉菜单也不起作用

CSS媒体查询方向更改不起作用PhoneGap

CSS 'transform: scale()' 属性在 iOS Safari 和 iOS Chrome 上也不起作用

无法在 mvc5 web.config 更改中上传更大的文件也不起作用[重复]

iOS 查询更新不起作用