ios - 如何设置第二个 UIWindow 的方向

标签 ios objective-c uiwindow

我的主要 ViewController viewDidLoad 函数中有以下代码

window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];


nav = [[NavWithAutoRotateViewController alloc] initWithRootViewController:self];

[window addSubview:[nav view]];
[window makeKeyAndVisible];


[[self navigationController] setNavigationBarHidden:YES];

我的 ipad 应用程序当前设置为仅在横向模式下工作,我正在使用这个新窗口显示快速查看文档并允许导航栏提供后退按钮和保存文档选项。主要问题是新的 UIWindow 方向与我的主要应用程序 UIWindow 不匹配。

我在上面有一个名为 NavWithAutoRotateController 的自定义 UINavigationController,这里是该 Controller 的代码。

-(id)init
{
    if(self)
    {
//        _supportedInterfaceOrientatoin = UIInterfaceOrientationMaskLandscape;
//        _orientation = UIInterfaceOrientationLandscapeLeft;
    }


    return self;
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (BOOL)shouldAutorotate
{
    return YES;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    return YES;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscapeLeft;
}


// Tell the system which initial orientation we want to have
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationMaskLandscape;
}

最佳答案

我想我有一个解决方案。问题似乎在于将 UIViewController 分配给额外的 UIWindow 中的 rootViewController

如果您只是假设您可以使用主 UIWindow 正在使用的相同 View Controller ,然后将内容添加为新 UIWindow 的 subview ,则存在方向问题。

为了解决这个问题,我做了以下事情:

UIWindow *newWindow = [[UIWindow alloc] initWithFrame: [UIApplication sharedApplication].keyWindow.frame];
newWindow.windowLevel = UIWindowLevelStatusBar+1;
// You can use a view controller instantiated from a xib or storyboard here if you want.
// Just don't use the view controller already set as a UIWindow's rootViewController.
UIViewController *newViewController = [[UIViewController alloc] init];
newWindow.rootViewController = newViewController;
[newWindow makeKeyAndVisible];
// Add something to the new UIWindow. Can use the new UIViewController's view:
[newViewController.view addSubview: myContentView];
// Or could add it as subview of UIWindow: - either works.
[newWindow addSubview: myContentView];

这样做似乎已经解决了围绕旋转的所有奇怪问题。 希望这会有所帮助。

关于ios - 如何设置第二个 UIWindow 的方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18256381/

相关文章:

objective-c - 如何在 OSX Lion 上的 Xcode 中获取可见窗口列表?

javascript - 在 Safari iOS 上未触发 Hammer.js 滑动事件

ios - Swift:无法以编程方式配置自定义表格单元格?初始化没有被调用?

objective-c - Objective C 中的无效 float 比较

objective-c - 我可以在旧版本的 iOS 上使用 ARC 吗?

ios - 在 View Controller 呈现动画期间响应触摸事件

iphone - 在 Objective-C (iPhone) 中使用 SVC 网络服务

objective-c - 设置数组的差异

ios - 可以[self.window makeKeyAndVisible];在设置 rootviewcontroller 之前被调用

iOS – 切换 UIWindow 时的释放问题