0

我正在构建一个 iPad 应用程序,其视图水平拆分并从顶部和底部动画化(想想下巴滑动关闭和打开以分别出现和消失)。

我的问题是自定义颚子视图的布局仅在视图以横向加载时才被破坏。(jaws-view 容器以适当的大小加载,但是上半部分和下半部分的后续子视图太高,并且超出了屏幕。但它们的宽度是正确的。)

我可以从纵向开始,然后旋转,一切都安排妥当。

我已经尝试在一堆地方将新视图的框架设置为原始视图的边界(正如许多对我不起作用的答案所建议的那样,根据要求提供链接),但要么没有找到正确的位置,或需要更多的东西。

我需要做任何特别的事情来获得传播的大小吗?有没有我不应该做动画的点?(我试图在我的新视图控制器的 viewDidLoad 中移动顶部和底部。)

4

2 回答 2

2

解决这个问题需要 2 个部分。

第一个在此答案中进行了描述: https : //stackoverflow.com/a/8574519/1143123 描述了使用 viewWillAppear 方法而不是 viewDidLoad (之前称为边界值和“不正确”值)。这解决了在横向加载视图(并传播到后续旋转)时视图布局正确的问题。

第二部分是,如果我开始对其进行动画处理,然后同时进行旋转,视图仍然会变得混乱。我将动画类更改为仅移动中心坐标(而不是滑动框架),这本来会更好,但这并没有解决问题。最后,我在 ViewController 中为表现出这些问题的类硬编码了以下内容:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    [super didRotateFromInterfaceOrientation:fromInterfaceOrientation];

    // The container view should match the size of the current view
    gameView.frame = self.view.bounds;

    CGFloat width = self.view.bounds.size.width;
    if(roundInProgress) {
         gameView.jawsTop.frame = CGRectMake(0, 0, width, self.view.bounds.size.height/2);
         gameView.jawsBottom.frame = CGRectMake(0, self.view.bounds.size.height/2, width, self.view.bounds.size.height/2);

    } else {
        // If round not in progress, game cards should be offscreen
        CGFloat height = self.view.bounds.size.height/2;
        gameView.jawsTop.frame = CGRectMake(0, -height, width, height);
        gameView.jawsBottom.frame = CGRectMake(0, self.view.bounds.size.height, width, height);

    }
}
于 2012-06-21T06:51:29.967 回答
1

在没有看到您的代码的情况下,我的猜测是它与父视图的“自动调整子视图”属性和/或子视图的自动调整大小设置有关。尝试在 Interface Builder 中更改该属性以查看是否可以解决您的问题。

于 2012-06-14T12:34:03.460 回答