获得自动旋转的尺寸UIView将在旋转屏幕后给出?

时间:2012-05-06 04:44:48

标签: ios autorotate

问题:是否有可能获得旋转屏幕后将给出自动旋转UIView的大小,但是在旋转完成之前获取此值 ?如果是这样,怎么样?

背景:我正在构建一个iPad应用,其中有一个屏幕,其中多个UILabel排列在包含UIView的列中(小于屏幕的主要UIView。)标签的数量和编译时不知道每个标签中的文本长度。它们在运行时动态地在屏幕上布局,并使用一种算法,该算法尝试选择最佳的列数和宽度,以防止事物被屏幕截断。为了使重新调整过程对用户来说尽可能顺利,我相信我需要在内部做到这一点:

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

但是当然这个方法在旋转完成之前被调用,因此需要事先知道包含UIView的大小。

2 个答案:

答案 0 :(得分:1)

在iOS 5中,viewWillLayoutSubviews将实现您的目标。

在iOS 4中,你可以通过动画控件/子视图的移动来减少动作,即使它发生在didRotateFromInterfaceOrientation中(我知道它听起来不像它,但它有很大的不同)。因此,如果您想要将按钮移动到newFrame的动画,它就像:

一样简单
[UIView animateWithDuration:0.25 animations:^{ 
    [button setFrame:newFrame]; 
}];

最后,明智地使用autoResizingMask,也非常有帮助,尽管我认为这是不可能的,因为你是相互控制的。

答案 1 :(得分:0)

退房:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

您可以在此处找到所有这些方法:

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html