2010-12-13 57 views
3

我有一个UIViewController,有一堆子视图,如果iPad处于纵向或横向模式,我需要按不同顺序进行布局。我希望能够在旋转后抓住UIViewController视图将要转换的大小,以便我可以为我的子视图计算新的一组帧。然而,在旋转发生之前,我还没有找到任何方法来获得这个新的尺寸,到旋转发生的时候已经太迟了,因为我无法将子视图转换到新的位置。在旋转后获取UIViewController视图的大小

有没有人知道解决这个问题的方法?

回答

3

你试过willAnimateRotationToInterfaceOrientation:duration:。正如文档所述:

在调用此方法时,interfaceOrientation属性已设置为新方向。因此,您可以在此方法中执行视图所需的任何其他布局。

我相信视图控制器的视图也应该在这个方法中有其新的尺寸。

+0

我目前正试图找出这个相同的问题,我发现该视图还没有它的新维度。如果我在'willAnimateRotationToInterfaceOrientation:duration'中设置视图的宽度,那么视图最终会在状态栏上留下空隙。 – Aaron 2013-05-28 21:03:20

1

定义你的landscapeportrait意见在你的头,在Interface Builder重视他们,试试这个代码:

-(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];为新视图设置动画。