当我的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];
}
}
答案 0 :(得分:2)
如果我解决了这个问题,我会做以下其中一个
为了定位,我会非常努力不完全换掉视图。即使你已经解决了这个问题,它似乎还会继续存在问题。
答案 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:]
}
所以现在当你创建你的模态时,它会链接到你的控制器,它现在有一个恒定的主视图。
请注意,我没有对此进行测试,因为我在两周后重新开始编码... 祝你好运!