我的UIViews
中有两个UIViewController
。我想要一个旋转,另一个要锁定。基本上,一个UIView可以从纵向和横向切换,而另一个UIView可以在它的"肖像"模式。
起初我尝试使用shouldAutorotate
但后来我意识到这适用于属于UIViewController
的所有内容。然后我尝试了两个UIViewController
s(顺便说一下,它对于旋转问题很有效)但是我在一个视图控制器中进行了AVCaptureSession
并且我不想连接相机输入并每次初始化会话。
有没有办法让我能够旋转而另一个被锁定?
谢谢!
答案 0 :(得分:1)
我认为你可以用shouldAutorotate
来做。当设备更改方向时,您的两个视图都将旋转,然后使用如下所示的变换手动旋转固定视图的初始位置,
myView.transform = CGAffineTransformMakeRotation(M_PI_2);
您可以使用下面的委托来执行手动轮换
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
// do something before rotation
}
或
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
// do something after rotation
}
更新:
请参阅this answer以禁用动画! 希望这会有所帮助:)
答案 1 :(得分:0)
ALRIGHT我花了整整一个半月的时间来弄明白,但这是我的解决方案:
每次设备旋转时,很难记住所有单独的UIViews
旋转,所以我回到了两个UIViewControllers
方法。
这次我决定让UINavigationController
作为根视图控制器,我将其子类化。我在我的接口类中设置了一个NSNumber
变量来说明用户可以拥有的2个或更多视图控制器。但是,在我的情况下,我只会在0和1之间切换。此外,我根据shouldAutoRotate
变量覆盖supportedInterfaceOrientations
和NSNumber
以具有不同的属性。
在进一步解释之前,我会发布我的代码......
这是我的界面类:
@interface MasterNavigationController : UINavigationController
@property (strong, nonatomic) NSNumber *num;
@end
我的实现类:
#import "MasterNavigationController.h"
@implementation MasterNavigationController
- (BOOL)shouldAutorotate {
if ([_num isEqualToNumber:[NSNumber numberWithInt:0]]) return NO;
return YES;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
if ([_num isEqualToNumber:[NSNumber numberWithInt:0]]) return UIInterfaceOrientationMaskPortrait;
return [[self topViewController] supportedInterfaceOrientations];;
}
@end
每当我在UIViewController
我不想旋转时,NSNumber
变量将被设置为0.因此,导航控制器将能够判断它是否应该自动旋转或不。然后当导航控制器按下可以旋转的下一个视图控制器时,我将NSNumber
变量设置为1,导航控制器能够知道它应该是自动旋转的。
这很棒,因为每当它推回到非旋转视图控制器时,它就会知道自己重新定位而不会搞砸所有。
希望这可以帮助其他人遇到麻烦!我花了很长时间才弄明白这一点。