在我的应用中,我使用纵向导航控制器启动了第二视图控制器,然后在第四视图控制器中完成了操作,在该控制器中应该旋转iPhone以显示图像。
现在的问题是:
如果在目标中以这种方式设置方向:
我可以使用此方法旋转图像:
- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
并且它可以正常工作,但是我无法锁定属于navigationcontroller的所有视图,因为它们全部旋转为人像和风景。
第二种选择是以这种方式设置目标:
但是此结构无法检测方向:
在视图中将出现:
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
[self willRotateToInterfaceOrientation:orientation duration:1];
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
- (BOOL)shouldAutorotate
{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscape;
}
- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
if (toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
{
}
else
{
}
}
else{
if (toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
{
}
else
{
}
}
}
最好的解决方案是什么?
谢谢
最佳答案
我忍不住觉得,如果我阅读了文档,那可以节省一些时间,但是对我来说,解决方案是子类 UINavigaionController并添加以下内容:
- (BOOL)shouldAutorotate
{
return NO;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationPortrait;
}
而且由于这里实际上没有发生任何实质性的事情,因此无需使用编码器或其他任何方法覆盖init。您可以在以前引用导航控制器(包括Interface Builder)的任何地方引用该子类。
关于ios - iOS:UINavigationController中的锁定方向,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18334765/