iOS:如何更改应用程序中只有一个视图控制器的方向?

时间:2015-02-11 08:04:12

标签: ios objective-c iphone

我在我的应用中面向视图方向的问题。

我有两个视图控制器,VC1和VC2

VC1已修复横向方向。 VC2都有

VC1 - > VC2很好。表示当我从VC1转到VC2时,VC2会在横向和纵向中更改其方向。

但是当我从VC2(纵向模式下的VC2)回归到VC1时,VC1也处于纵向模式,但我想VC1仅处于横向模式而与VC2模式无关。

请伙计们帮助我。寻求最近2天的解决方案。 提前谢谢。

4 个答案:

答案 0 :(得分:0)

请参阅以下链接以获取解决方案

http://swiftiostutorials.com/ios-orientations-landscape-orientation-one-view-controller/

在你的VC1 ..

-(BOOL)shouldAutorotate
{
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscapeLeft;
}

希望它对你有所帮助......

答案 1 :(得分:0)

首先,在AppDelegate.m

中写一下
while :
do
    echo "in loop"
    sleep 60 &
    while ! wait $!
    do
        continue
    done
done

然后,对于VC1,在横向方向,请写下:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
 return (UIInterfaceOrientationMaskAll);
}

对于同时具有这两者的VC2,将屏蔽更改为全部。

- (BOOL)shouldAutorotate
{
 return YES;
}

- (NSUInteger)supportedInterfaceOrientations
{
 return (UIInterfaceOrientationMaskPortrait);
}

答案 2 :(得分:0)

基本上iOS应用程序中基于视图控制器的方向支持是小菜一碟 - 我在 Swift 中完成了代码,但 ObjC 概念完全相同对此。

我已经使用UINavigationController创建了一个快速教程,但您可以通过保留概念但稍微更新环境将其转换为UITabBarController

步骤-1

最初为您的应用设置方向支持,如下所示:

all possible orientation is supported by default

步骤-2

创建一个简单的基于UINavigationController的故事板,如下所示:

that is how it will look at the end

注意: 如果最初没有说OrientaionSupporterController,请不要担心(如果你发现了import UIKit // MARK: - Implementation class OrientaionSupporterController: UINavigationController { // MARK: - Active View Controller private var activeViewController: UIViewController? { get { return self.presentedViewController ?? self.topViewController // for possible modal support } } // MARK: - Orientations override var shouldAutorotate: Bool { get { return self.activeViewController?.shouldAutorotate ?? true // yes, rotate it, please } } override var supportedInterfaceOrientations: UIInterfaceOrientationMask { return self.activeViewController?.supportedInterfaceOrientations ?? .all // default is all possible orientations } } 这里一致错字!),我将在下一步中介绍它。

步骤-3

创建导航控制器的子集,如下所示:

import UIKit

// MARK: - Implementation

class ViewController: UIViewController {

    // MARK: - Orientation

    override var shouldAutorotate: Bool {
        get {
            return true
        }
    }

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        return [.portrait, .landscapeLeft] // no one find that preactical but works flawlessly
    }

}

然后确保它也成为IB中的基类:

that is the base class for your navigation-controller from now

步骤-3

创建具有自定义方向支持的各个视图控制器,例如只有肖像横向左支持:

UITabBarController

注意: 您可以随时使用selectedViewController转换本教程,您只需(显然)创建标签栏的子集 - 控制器并使用UIWindow获取当前可见的。

注意#2: 显然,您可以通过这种方式更进一步,您可以在视图层次结构中嵌套自定义导航控制器,或者如果您在队列中有多个Laravel Framework 5.5.26实例,并覆盖每个窗口中支持的方向(例如,一些支持所有四个方向,而一些其他窗口仅用于例如视频播放,等等...)

答案 3 :(得分:0)

<强> 1。启用项目的所有方向支持。

对于VC1添加此行VC1Controller类

- (UIInterfaceOrientationMask)supportedInterfaceOrientations { 
  return UIInterfaceOrientationMaskLandscape;
}

对于VC2在VC2Controller类中添加它

- (UIInterfaceOrientationMask)supportedInterfaceOrientations { 
      return UIInterfaceOrientationMaskAll;
    }