在我的应用程序中,我使用了Alternate Landscape Interface策略(将您的横向视图显示为模态)。我还使用导航控制器进行转换,这会导致以下问题:我不知道如何从横向方向正确推送/弹出。
我提出了以下解决方案,但有人可能知道更好的解决方案。假设一个人只需要处理两个视图。我们称它们为AP,AL,BP,BL,其中第二个字母代表方向。我们从内置AP的导航控制器开始。在AP和BP之间我们只需推/弹。为了从AP到AL,我们提出了一个带有AL的模态导航控制器。要在AL和BL之间切换,我们在第二个导航控制器内推/弹。现在从BP到BL,我们将播放w / o动画并呈现一个模态导航控制器,BL位于AL顶部。从BL到BP,我们解雇模态导航控制器并推动BP无w动画。
似乎有点难看,但并不是那么糟糕。谁能想到更好的东西?
提前致谢!
答案 0 :(得分:1)
是否有某些原因需要在单独的控制器中将横向方向显示为模态?当我对我的肖像和风景方向有两个完全不同的视图时,我会在它们在旋转期间伸展时消失。
这允许两个方向的内容大不相同,它们之间有一个很好的过渡,以及一个控制器下的共享代码。
这是一些代码。当我们改变方向时,我们的UIViewController将在 portraitView 和 landscapeView 之间切换。
portraitView 和 landscapeView 都是UIViewController的视图的子项。层次结构如下所示:
UIViewController
|
- view
|
|- portraitView
|
|- landscapeView
两者都有 autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight 以确保它们在视图控制器旋转时伸展。
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
if( orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight )
{
[UIView animateWithDuration:duration
animations:^
{
//Fade the landscape view over the top of the
//portrait view as during rotation
landscapeView.alpha = 1.0f;
}
completion:^(BOOL finished)
{
//Hide the portrait view when landscape is fully
//visible
portraitView.alpha = 0.0f
}];
}
else
{
//Show the portrait view (underneath the landscape view)
portraitView.alpha = 1.0f;
[UIView animateWithDuration:duration
animations:^
{
//Fade out the landscape view to reveal the portrait view
landscapeView.alpha = 0.0f;
}];
}
}
您的控件和子视图将与适当的视图一起淡化和停用,从而允许您拥有完全不同的内容。最近我用这个在改变方向时在两个不同的背景图像之间淡入淡出。效果非常顺利。
您现在可以创建两个视图控制器, A 和 B ,每个视图控制器管理两个视图,如上所述。然后,您可以正常按下视图控制器,而不必担心在旋转期间管理UINavigationController的视图控制器堆栈。