在iPad上旋转时如何阻止模态视图消失?

时间:2011-02-14 04:01:42

标签: objective-c ipad ios uikit rotation

当我的iPad旋转时,我正在使用willRotateToInterfaceOrientation来交换视图。如果我在设备旋转并交换视图时打开了模态视图或警报视图,则视图交换并且警报消失并且不会再次出现,即使警报稍后再次“显示”。

修改 我已经把这个问题缩小了一点。当模态视图显示UIModalPresentationFullScreen时,模态视图“幸存”旋转。

我该怎么做才能解决这个问题?

以下是willRotateToInterfaceOrientation的实施方式:

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{

[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];

//
//  Load an alternate view depending on the orientation
//


if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) {

    [UIView beginAnimations:@"" context:nil];
    [self setView:theLandscapeView];
    self.view.bounds = CGRectMake(0, 0, 1024, 768);
    self.view.transform = CGAffineTransformMakeRotation(kDegreesToRadians * (-90));
    [UIView commitAnimations];      

}else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {

    [UIView beginAnimations:@"" context:nil];
    [self setView:theLandscapeView];
    self.view.bounds = CGRectMake(0, 0, 1024, 768); 
    self.view.transform = CGAffineTransformMakeRotation(kDegreesToRadians * (90));
    [UIView commitAnimations];

}else if (toInterfaceOrientation == UIInterfaceOrientationPortrait) {

    [UIView beginAnimations:@"" context:nil];
    [self setView:thePortraitView];
    self.view.transform = CGAffineTransformMakeRotation(kDegreesToRadians * (0));
    self.view.bounds = CGRectMake(0, 0, 768, 1024);
    [UIView commitAnimations];

}else if (toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {

    [UIView beginAnimations:@"" context:nil];
    [self setView:thePortraitView];
    self.view.transform = CGAffineTransformMakeRotation(kDegreesToRadians * (180));
    self.view.bounds = CGRectMake(0, 0, 768, 1024);
    [UIView commitAnimations];
}   
}

3 个答案:

答案 0 :(得分:2)

如果我解决了这个问题,我会做以下其中一个

  1. 将备用视图添加到父视图,而不是更改视图属性
  2. 为不需要完整视图交换的视图创建设计,但重新排列或隐藏视图的子元素。
  3. 显示层次结构的根ViewController中的任何模态
  4. 为了定位,我会非常努力不完全换掉视图。即使你已经解决了这个问题,它似乎还会继续存在问题。

答案 1 :(得分:0)

如果您交换视图,您还应该交换我认为的模态视图。

例如,如果你出现popover控制器 - 它将自动被解除,然后出现UI旋转。

答案 2 :(得分:0)

这是一个想法:让主视图保持不变,但将子视图更改为纵向或横向视图。类似的东西:

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{

    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];

    // Remove the current subview from the main view
    if (self.view.subviews.count) {
        [self.view.subviews objectAtIndex:0] removeFromSuperview];
    }

    // Use your if-else block, but change [self setView:] for [self.view addSubview:]
}

所以现在当你创建你的模态时,它会链接到你的控制器,它现在有一个恒定的主视图。

请注意,我没有对此进行测试,因为我在两周后重新开始编码... 祝你好运!