问题描述
在许多情况下需要旋转控制器并且无法正常工作。
现在我有问题的反转:它正在旋转,我想禁用。
In many situation need to rotate the controller and is not working.Right now I have the inverse of the problem: it is rotating, and I want to disable.
在那个ViewController中我有这个:
In that ViewController I have this:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown);
}
但它是自动旋转的,因为不是这个UIViewController被问到,但他的UI树中的父级。也许这就是问题所在。 根控制器必须为所有情况返回Yes,因为堆栈上还有一些其他UIViewControllers,它们必须具有/必须具有Portait / Landscape支持。
but it is auto-rotating, because not this UIViewController is asked, but his parent in UI tree. Maybe that is the problem. The root controller must return Yes for all cases, because there are a few other UIViewControllers on the stack, which has / must have Portait / Landscape support.
我不能/不想触摸其他部分,因为...有几个原因,例如:应用程序很大,有很多已知错误,我不想做1并测试它持续1周,其他是截止日期。
I can't / don't want to touch other parts, because ... there are several reasons, for eg: the app is huge, with lot of know bugs and I don't want to make 1 and test it for 1 week, other is the deadline.
请不要暗示它不应该是这样,必须重写。我知道。
Please don't suggest it shouldn't be like this and must rewritten. I know.
如何处理这个控制器以强制使用Portait?
How to deal with this controller to force Portait ?
请阅读粗体文字: 无法强制整个应用程序仅支持1个视图控制器的Portait,堆栈中有很多!
推荐答案
检测Landscape旋转并旋转到Portait:
detect the Landscape rotation and rotate to 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)];
}
}
}
它不是最好的编程范式,但它确实可以解决问题。
it isn't the best programming paradigm, but it does the trick.
如果可以的话,有人会写类似tis来接受他的回答,或者写一个更好的方法!
Somebody write similar like tis to accept his answer, or write a better method, if you can!
这篇关于UIViewController不会旋转到横向的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!