我想让 UIView 接管整个屏幕以不时显示图像,但大多数时候我将 UISplitViewController 用于主要应用程序功能。是否有推荐/最佳实践方法来做到这一点?现在,我有一个指向主窗口的指针,只是将 UIView 添加为子视图并将其置于前面,但它不会以正确的方向显示。我只是想知道是否有更好的方法/我缺少的一些简单的东西。
谢谢。
我在同样的问题上苦苦挣扎了一段时间,并想出了一个笨拙的解决方法。在我的解决方案之前,有关障碍的更多背景知识:
因此,我认为您可以做的是维护两个“方向感知”视图控制器(一个 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];
}
}
}
我从这里和其他来源获得了很多这样的代码,但据我所知,这个实现是独一无二的。可能是因为它不完美。
I ended up using a modal view controller which I present from the split view controller. I then specify the allowed orientations in -shouldAutorotateToInterfaceOrientation. I also hide the status bar. This works for my needs.