1

问题:是否可以在屏幕旋转后获得自动旋转的UIView的大小,但在旋转完成之前获得该值?如果是这样,怎么做?

背景: 我正在构建一个 iPad 应用程序,它有一个屏幕,其中几个 UILabel 在包含 UIView 的列中排列(小于屏幕的主 UIView。)每个标签中的标签数量和文本长度未知在编译期间。它们在运行时通过一种算法在屏幕上动态布局,该算法试图选择最佳的列数和宽度,以防止内容从屏幕上被剪掉。为了使重新调整过程对用户来说尽可能顺利,我相信我需要在以下内部执行此操作:

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

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

4

2 回答 2

1

在 iOS 5 中,viewWillLayoutSubviews将实现您想要的。

在 iOS 4 中,您可以通过为控件/子视图的移动设置动画来使移动不那么刺耳,即使它发生在didRotateFromInterfaceOrientation(我知道这听起来不像,但它有很大的不同)。因此,如果您想为按钮移动到 newFrame 设置动画,它很简单:

[UIView animateWithDuration:0.25 animations:^{ 
    [button setFrame:newFrame]; 
}];

最后,明智地使用autoResizingMask, 也有很大帮助,尽管我认为这是不可能的,因为您正在相对于彼此移动控件。

于 2012-05-06T12:11:21.250 回答
0

查看:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

你可以在这里找到所有这些方法:

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

于 2012-05-06T04:51:18.840 回答