Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone iPad定位变更问题_Iphone_Ipad_Uiinterfaceorientation - Fatal编程技术网

Iphone iPad定位变更问题

Iphone iPad定位变更问题,iphone,ipad,uiinterfaceorientation,Iphone,Ipad,Uiinterfaceorientation,我的iPhone应用程序在iPad上运行时,在支持方向改变方面表现出一些奇怪的行为 该应用程序启动时有一个视图控制器(为便于参数称之为视图a)和导航控制器,并且shouldAutorotateToInterfaceOrientation仅对纵向返回YES。在导航控制器上,我按下一个视图控制器(视图B),该控制器也会返回YES(仅适用于纵向)。然后,我将另一个视图控制器(视图C)推到支持所有旋转的导航控制器上,并根据旋转方向调整屏幕上的项目 在iPhone模拟器和设备上运行此功能时,如果在视图C上

我的iPhone应用程序在iPad上运行时,在支持方向改变方面表现出一些奇怪的行为


该应用程序启动时有一个视图控制器(为便于参数称之为视图a)和导航控制器,并且shouldAutorotateToInterfaceOrientation仅对纵向返回YES。在导航控制器上,我按下一个视图控制器(视图B),该控制器也会返回YES(仅适用于纵向)。然后,我将另一个视图控制器(视图C)推到支持所有旋转的导航控制器上,并根据旋转方向调整屏幕上的项目

在iPhone模拟器和设备上运行此功能时,如果在视图C上旋转到横向,然后点击后退按钮返回视图B,则会执行正确的操作,并将视图B切换回纵向模式。(在模拟器中,它甚至自动将模拟器旋转回纵向。)

我遇到的问题是,当我在iPad模拟器和设备上执行完全相同的事件序列时,出现的视图B没有旋转回纵向,导航控制器仍然显示视图C的信息。然后,我点击后退按钮,视图保持不变,但导航控制器显示视图B正常(但仍处于横向模式)。然后,如果我再次点击后退按钮,视图A将显示在视图B导航栏项目下,最后再次点击后退将显示带有导航栏A项目的视图A


如果我在iPad上转到view B并开始旋转,则应自动旋转指针FaceOrientation以NO键启动,直到我达到纵向模式,然后所有操作都恢复正常

该应用程序使用最新发布的iPhone SDK构建,构建设置如下:iPhone Simulator 4.0的基本SDK、iPhone的目标设备系列、iPhone OS 3.1.3的iPhone OS部署目标

有什么想法吗?

苹果表示:

大小写:UIDABBARController或UINavigationController中的所有子视图控制器在公共方向集上不一致


响应:为确保所有子视图控制器正确旋转,必须为代表每个选项卡或导航级别的每个视图控制器实现shouldAutorotateToInterfaceOrientation。每个视图控制器必须在相同的方向上达成一致,才能进行旋转。也就是说,对于相同的方向,它们都应返回YESn个位置


您可以在导航控制器中而不是在单个视图中设置设备方向。然后,您可以检查堆栈上的哪个视图,并根据结果进行旋转。这样,导航控制器也可以处理所有方向。

以下是我用来防止该错误的一些代码:

- (void)viewDidLoad {  
    if (self.interfaceOrientation == UIInterfaceOrientationPortrait) {
        self.view.transform = CGAffineTransformIdentity;
        self.view.transform = CGAffineTransformMakeRotation(M_PI/2);
        self.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
    }
    [UIView commitAnimations];
}


根据设备所处的方向,您需要修改一些代码。

我这里有完全相同的问题,我相信这是iOS3.2中的一个错误。在我的iPhone(3.1.2和4.0)上,一切都是应该的。遗憾的是,没有(文档记录)手动改变方向的功能。让我们看看其他人在这里说了些什么……这不是问题。请仔细阅读问题。iPhone和iPad之间有着真正的区别,它们如何处理这个问题……我理解问题,我只是传递苹果的指导:)如果你觉得这是模拟器中的一个bug,你应该向苹果公司报告此事。很多人使用带方向的导航控制器,但我似乎找不到任何关于其他人有相同问题的信息,即使3.2已经发布很长时间了。我认为这确实适用于你的情况。视图C支持所有方向,而A和B仅支持纵向。苹果公司的QA1688表示,UINavigationController下的所有子视图控制器必须在一组方向上达成一致意见。我在中遇到了相同的问题(vc不同意方向)。IOS6中不推荐使用shouldAutorotateToInterfaceOrientation第一个设置转换类型(标识),第二个设置转换。如果设备处于该方向,还应显示AutoRotateTointerFaceOrientation以旋转。如果设备是横向的,那么界面将不会旋转,除非它是纵向的。我提交的代码是为iPhone(320和480)编写的,但是如果设备的方向是lanscape,则视图将看起来像是纵向的,这使得用户倾斜设备以将其设置为纵向(反之亦然)。我同意progrmr的观点:您不必两次分配转换属性。第一个作业将被忽略,因为你没有做任何事情
CGAffineTransformMakeRotation
只返回一个旋转,表示添加了旋转的身份转换。
- (void)viewDidLoad {
    if (self.interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
        self.view.transform = CGAffineTransformIdentity;
        self.view.transform = CGAffineTransformMakeRotation(-(M_PI / 2));
        self.view.bounds = CGRectMake(0, 0, 320, 480);;
    }
    [UIView commitAnimations];
}