1

-我有一个 UIView。
- 这个 UIView 有一个 UIButton,当点击它时会出现一个 UIAlertView。
-在这个 UIAlertView 中,我有另一个 UIButton,当单击它时调用 buttonClicked:
-在这个 buttonClicked: 方法中,我调用 presentPopoverFromRect 并在里面有一个自定义视图。(hourKeyboard 是自定义视图)

-(void)buttonClicked:(id)sender
{
    if(self.hourKeyboard==nil)
    {
        self.hourKeyboard = [[HourKeyboardViewController alloc] init];
        self.hourKeyboardPopover = [[UIPopoverController alloc] initWithContentViewController:self.hourKeyboard];
    }

    [self.hourKeyboardPopover presentPopoverFromRect:[sender bounds] inView:sender permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
}

在正常人像模式下,这很好用。弹出框出现在按钮的右侧,箭头正确地指向按钮的左侧。

出现了 2 个问题:
1)虽然此弹出框可见,但当您旋转屏幕时,弹出框会稍微不正确地旋转(它不会重新定位它自己的 x 和 y 位置)
2)如果未显示弹出框。如果您旋转屏幕,然后调用“buttonClicked”,弹出框将出现,但是,它显示在按钮上方的侧面,箭头“向下”指向按钮(技术上相对于侧面弹出框视图而言是左侧)。如果你关闭它,旋转屏幕,然后调用“buttonClicked”,弹出框现在出现倒置,按钮指向“右”按钮(同样,技术上相对于侧面弹出框视图而言是左侧)!重复使其再次向侧面,然后再次向右上方。

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

我的想法:

1)我相信我可以重新定位 x 和 y,但是,我还读到您应该关闭弹出框并在旋转时再次显示它。我会看看我是否能让第一个工作,但我更关心第二个问题。

2)我不知道如何解决这个轮换问题。似乎当您旋转到横向时,弹出框不可见。然后你调用presentPopoverFromRect,弹出框是用iPad创建的,认为它仍然错误地处于纵向视图中。这就是它给出的行为,但是,我不确定如何让 iPad 不犯这个错误。

-=-=-=-=-=-=-=-=-=

再次感谢您提供的任何帮助!

-=-=-

轻微更新:
1)很容易从旋转的主视图中消除弹出框。这似乎是每个人处理这个问题的一般方式。

2)尝试各种事情,如改变框架,使用 CGAffineTransformMakeRotation 等等......但到目前为止还没有运气

-=-=-

另一个更新:

2)经过大量测试,似乎是UIAlertView的直接问题。如果我将视图放置在 UIAlertView 中(当前正在执行),则 AlertView 不会告诉弹出窗口屏幕已旋转...从而产生问题

看起来解决此问题的唯一方法是完全删除 UIAlertView。我将手动禁用各种背景视图(就像 Alert View 所做的那样),而不是显示 UIAlertView,然后显示一个看起来与 AlertView 非常相似的自定义 UIView。从那里,我应该能够毫无问题地显示弹出窗口。我会让你知道结果如何。

-=-=-=-=-=-=-=-

最终解决方案:

我最终只是创建了自己的视图,并让该视图模仿 UIAlertView。然后当我生成弹出框时,我将它放在根视图控制器中。工作得更好,但需要更多的工作,因为我必须手动创建自己的视图而不是预制的 UIAlertView。无论哪种方式,显然 UIAlertView 都无法告诉 UIPopoverover 子视图它在哪个旋转中。

4

1 回答 1

1

关闭弹出窗口willRotateToInterfaceOrientation并在didRotateFromInterfaceOrientation.

它没有问题。

编辑:对不起,我误解了你的第二个问题。

如果您的视图层次结构的某些部分以错误的方向显示,则您的控制器之一可能缺少shouldAutorotateToInterfaceOrientation方法。

于 2012-05-07T17:10:36.660 回答