我有一个带有一堆子视图的UIViewController,如果iPad处于纵向或横向模式,我需要以不同的顺序进行布局。我希望能够在旋转后获取UIViewController视图将要转换为的大小,以便我可以为子视图计算新的帧集。但是,我没有找到任何方法在旋转发生之前获得这个新的大小,并且在旋转发生的时候已经太晚了,因为我无法动画子视图到新位置的过渡。
有没有人知道解决这个问题的方法?
答案 0 :(得分:3)
您是否尝试过willAnimateRotationToInterfaceOrientation:duration:
。正如文档所述:
调用此方法时,interfaceOrientation属性已设置为新方向。因此,您可以在此方法中执行视图所需的任何其他布局。
我认为视图控制器的视图在此方法中也应该有新的维度。
答案 1 :(得分:1)
在标头中定义landscape
和portrait
视图,将它们附加到“界面”构建器中,然后尝试以下代码:
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if(((interfaceOrientation == UIInterfaceOrientationLandscapeLeft) ||
(interfaceOrientation == UIInterfaceOrientationLandscapeRight))){
self.view = landscape;
}else if(((interfaceOrientation == UIInterfaceOrientationPortrait) ||
(interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown))){
self.view = portrait;
}
return YES;
}
这比计算视图中每个对象的新帧要容易得多。
要制作动画,您可以投放[UIView beginAnimations:@"animation" context:nil];
& [UIView commitAnimations];
为新视图设置动画。