【问题标题】:Two Separate UIView Rotations两个独立的 UIView 旋转
【发布时间】:2016-05-13 05:09:12
【问题描述】:

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

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

有没有办法让一个旋转而另一个锁定?

谢谢!

【问题讨论】:

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


    【解决方案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 禁用动画! 希望这会有所帮助:)

    【讨论】:

    • 是否可以禁用旋转动画?谢谢,今天晚些时候我会试试这个
    • 实际上刚刚想通了,当shouldAutorotate 设置为NO 时,我让一个旋转,另一个固定。但是,现在旋转的视图保持纵向(它只是一个旋转的纵向)。我该如何解决这个问题?
    【解决方案2】:

    好吧,我花了整整一个半月的时间才弄明白,但这是我的解决方案:

    每次设备旋转时都很难计算所有单独的 UIViews 旋转,所以我回到了两个 UIViewControllers 方法。

    这一次我决定将UINavigationController 作为根视图控制器,并将其子类化。我在我的接口类中设置了一个NSNumber 变量来说明用户可能拥有的2 个或更多视图控制器。但是,在我的情况下,我只会在 0 和 1 之间切换。此外,我覆盖了 shouldAutoRotatesupportedInterfaceOrientations 以根据 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,导航控制器能够知道它应该是自动旋转的。 这很棒,因为每当它推回非旋转视图控制器时,它都知道要重新调整自己的方向,而不会搞砸。

    希望这可以帮助其他遇到此问题的人!!!我花了很长时间才弄清楚这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-23
      • 2021-02-09
      • 2013-09-26
      • 1970-01-01
      相关资源
      最近更新 更多