iOS>>在设备方向更改时更换笔尖

时间:2014-03-17 09:46:13

标签: ios replace xib device-orientation

在某种情况下,我希望在设备方向更改时替换为视图控制器提供的Nib。

这样的事情:

enter image description here enter image description here

我希望两个Nib文件都归同一个View Controller所有,所以他们对相同的IBActions,IBOutlets等做出反应......

此外,对于这种特定情况,自动布局会有点复杂(我在这里使用的图像只是为了演示问题 - 实际实现更复杂......)。

Apple example for this scenario有问题,因为它使用Segue进行此操作。 例如,如果VC是导航控制器堆栈的一部分,那么对后退按钮点击做出反应就会非常有问题 - 而不仅仅是弹出VC我将不得不使用Pop 2 VC(我认为):

enter image description here

直观地说,我正在考虑更换Nib文件(而不是执行Segue)。

这是一个有效的行动吗?

如果是这样,我应该如何在代码中执行它?

此外,它可以在Storyboard中实现,还是需要使用.xib文件?

3 个答案:

答案 0 :(得分:2)

Autolayout si非常适合这种情况,只有"只有"问题是你不能在Storyboard Editor中做,而是在代码中。我真的建议你一本书有一个同样的问题,埃里卡Sadun Autolayout去世了 方法是有不同的约束条件,一个用于横向和一个肖像,交替移除和安装它们,但也许最好的只是改变它们的优先级。
更改xi​​b似乎是一个更容易的解决方案,但在我的opionio中可用的选项较少。
你应该:

  • 创建2个xibs:一个用于纵向,一个用于横向
  • 在视图控制器的xib上,创建一个容器视图,使用自动调整遮罩或约束,根据主视图更改将其拉伸。
  • 在视图控制器方法- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duratio中交换2视图。因为它包含在一个动画块中,你可以在另一个上打开一个alpha并删除

看看here

答案 1 :(得分:1)

您可以这样做:

- (void)orientationChanged:(NSNotification *)notification
{
    UIDeviceOrientation devOrientation = [UIDevice currentDevice].orientation;
    if (UIDeviceOrientationIsLandscape(devOrientation) && !self.viewIsLandscape ) {
        [self presentModalViewController:self.landscapeVC animated:YES];
        self.viewIsLandscape = YES;
    } else if (UIDeviceOrientationIsPortrait(devOrientation) &&
               self.viewIsLandscape)
    {
        [self dismissModalViewControllerAnimated:YES];
        self.viewIsLandscape = NO;
    }
}

参考:http://www.edumobile.org/iphone/iphone-programming-tutorials/orientation-changes-for-iphone/

希望这会对你有帮助......

答案 2 :(得分:0)

您可以在单个XIB中创建两个单独的UIView,而不是两个不同的xib。您可以根据方向的变化更改视图。