我希望有一个UIView接管整个屏幕以不时显示图像,但大多数时候我使用UISplitViewController作为主应用程序功能。有没有推荐/最佳实践方法来做到这一点?现在,我有一个指向主窗口的指针,我只是将UIView添加为子视图并将其置于前面,但它不会以正确的方向显示。我只是想知道是否有一种更好的方法/简单的东西我不知道。
感谢。
答案 0 :(得分:1)
我在同一个问题上挣扎了一段时间,并提出了一个笨重的解决方法。在我的解决方案之前,还有一些关于障碍的背景知识:
所以,我认为您可以做的是维护两个“方向感知”视图控制器(一个splitView,一个全屏),并在切换全屏时切换它们并在它们之间移动视图。我没有走这条路,因为它显然是一个敏感的情境记忆和视图层次结构。
我所做的是在主视图的“几乎全屏”宽度和常规分割宽度之间切换。这很有效,只是splitView的圆角实际上是硬编码的图像,无论splitView的尺寸如何都可以绘制。您将在100%的时间内看到这些微小的黑色圆角。效果如下:
- (IBAction)toggleFullscreen:(id)sender; {
id appDelegate = [[UIApplication sharedApplication] delegate];
UISplitViewController *split = [appDelegate splitViewController];
//get master and detail view controller
UIViewController *master = [split.viewControllers objectAtIndex:0];
UIViewController *detail = [split.viewControllers objectAtIndex:1];
//In landscape permit fullscreen
if(self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
self.interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
CGRect f = detail.view.frame;
if ( f.origin.x == 0 ) { //exiting fullscreen
[sender setImage:[UIImage imageNamed:@"SlideLeft.png"]];
//adjust detail view
f.size.width = 703;
f.origin.x = 321;
[detail.view setFrame:f];
//adjust master view
f = master.view.frame;
f.size.width = 320;
f.origin.x = 0;
[master.view setFrame:f];
} else { //entering fullscreen
[sender setImage:[UIImage imageNamed:@"SlideRight.png"]];
//adjust detail view
f.size.width = 1024;
f.origin.x = 0;
[detail.view setFrame:f];
//adjust master view
f = master.view.frame;
f.size.width = 1;
f.origin.x = -1;
[master.view setFrame:f];
}
}
}
我从这里和其他来源获得了大量此代码,但据我所知,这种实现是独一无二的。可能是因为它不完美。
答案 1 :(得分:1)
我最终使用了一个模态视图控制器,它是我从拆分视图控制器中提供的。然后,我在-shouldAutorotateToInterfaceOrientation中指定允许的方向。我也隐藏了状态栏。这符合我的需要。