两个独立的UIView旋转

时间:2016-05-13 05:09:12

标签: ios objective-c uiview uiviewcontroller screen-rotation

我的UIViews中有两个UIViewController。我想要一个旋转,另一个要锁定。基本上,一个UIView可以从纵向和横向切换,而另一个UIView可以在它的"肖像"模式。

起初我尝试使用shouldAutorotate但后来我意识到这适用于属于UIViewController的所有内容。然后我尝试了两个UIViewController s(顺便说一下,它对于旋转问题很有效)但是我在一个视图控制器中进行了AVCaptureSession并且我不想连接相机输入并每次初始化会话。

有没有办法让我能够旋转而另一个被锁定?

谢谢!

2 个答案:

答案 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变量覆盖supportedInterfaceOrientationsNSNumber以具有不同的属性。

在进一步解释之前,我会发布我的代码......

这是我的界面类:

@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,导航控制器能够知道它应该是自动旋转的。 这很棒,因为每当它推回到非旋转视图控制器时,它就会知道自己重新定位而不会搞砸所有。

希望这可以帮助其他人遇到麻烦!我花了很长时间才弄明白这一点。