在许多情况下需要旋转控制器而不能正常工作。 现在我有问题的反面:它正在旋转,我想禁用。
在那个ViewController中我有这个:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown);
}
但是它是自动旋转的,因为不是这个UIViewController被问到,而是他的父亲在UI树中。也许这就是问题所在。 根控制器必须为所有情况返回Yes,因为堆栈上还有一些其他UIViewControllers,它们必须具有Portait / Landscape支持。
我不能/不想触摸其他部分,因为...有几个原因,例如:应用程序很大,有很多已知错误,我不想做1并测试它持续1周,其他是截止日期。
请不要暗示它不应该像这样,必须重写。我知道。
如何处理此控制器以强制使用Portait?
请阅读粗体文字:无法强制整个应用程序仅支持1个视图控制器的Portait,堆叠有很多!
答案 0 :(得分:2)
尝试将属性文件中应用程序支持的界面方向标记为仅为纵向。但是当然在该函数中,您只需在要允许旋转的视图控制器上返回YES。但是当你把它推回堆栈时,其他视图应该是肖像。
答案 1 :(得分:1)
检测横向旋转并旋转到Portait:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
UIInterfaceOrientation appOrientation = [UIApplication sharedApplication].statusBarOrientation;
float width = self.view.bounds.size.width;
float height = self.view.bounds.size.height;
//NSLog(@"width %3.0f, height: %3.0f", width, height);
if((fromInterfaceOrientation == UIInterfaceOrientationPortrait || fromInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)){
// if is rotated from Portait:
if((appOrientation == UIInterfaceOrientationLandscapeLeft || appOrientation == UIInterfaceOrientationLandscapeRight)){
// to Landscape:
CGAffineTransform transform = self.view.transform;
transform = CGAffineTransformRotate(transform, -(M_PI / 2.0));
self.view.transform = transform;
[self.view setBounds:CGRectMake(0, 0, height, width)];
}
}
else {
// it is rotated from Landscape:
if((appOrientation == UIInterfaceOrientationPortrait || appOrientation == UIInterfaceOrientationPortraitUpsideDown)){
// to Portrait:
CGAffineTransform transform = self.view.transform;
transform = CGAffineTransformRotate(transform, +(M_PI / 2.0));
self.view.transform = transform;
[self.view setBounds:CGRectMake(0, 0, height, width)];
}
}
}
它不是最好的编程范例,但它可以解决这个问题。
如果可以的话,有人会像tis那样写下接受他的答案,或者写一个更好的方法!