【问题标题】:Repositioning UIWindow after Rotating it旋转后重新定位 UIWindow
【发布时间】:2013-03-30 21:45:02
【问题描述】:

最近我做了一个自定义警报,它是UIWindow 的子类。当UIViewController 处于横向时,我正在尝试旋转警报。我能够成功旋转它,但是我无法重新定位它,使其原点位于屏幕的左上角。我有以下代码:

    CGRect mainScreenBounds = [[UIScreen mainScreen] bounds];
    UIDeviceOrientation deviceOrientation = [[UIApplication sharedApplication] statusBarOrientation];
    if (deviceOrientation == UIDeviceOrientationPortrait)
    {
        self.frame = CGRectMake(0,0, mainScreenBounds.size.width, mainScreenBounds.size.height);
    }
    else
    {
        self.frame = CGRectMake(0,0, mainScreenBounds.size.height, mainScreenBounds.size.width);

        if (deviceOrientation == UIDeviceOrientationLandscapeLeft)
        {
            self.transform = CGAffineTransformRotate(self.transform, M_PI / 2);
        }
        else
        {
            self.transform = CGAffineTransformRotate(self.transform, -M_PI / 2);
        }
        self.center = CGPointMake(self.bounds.size.width / 2, self.bounds.size.height / 2);
    }

无论出于何种原因,设置center 似乎都没有任何作用。有没有人知道我在这里可能做错了什么?

【问题讨论】:

    标签: iphone ios cocoa-touch cgaffinetransform uiwindow


    【解决方案1】:

    一个应用程序中不应有多个 UIWindow。已经有一个了。从 UIView 重新实现、子类化。

    来自UIWindow 文档:“除非应用可以在外部设备屏幕上显示内容,否则应用只有一个窗口。”

    【讨论】:

    • 我需要一个 UIWindow,这样我就可以像 UIAlertView 一样将它放在状态栏上。
    • 如果你想让状态栏消失,设置它消失
    • 不想让它消失,你知道当警报出现时它会在屏幕上显示黑色吗?这就是我想要的,并且需要一个 UIWindow。
    • 您可以使用 UIView(正确调整大小、重新设置父项)来实现,或者放弃使状态栏变暗 - 在调试器中向上查看视图层次结构,看看那里有什么
    • 我意识到这已经很老了,但是对于其他来到这里的人,我想重申一下,你可以在一个应用程序中拥有多个 UIWindow,实际上 UIAlertView 本身就是一个 UIView,确实显示在单独的 UIWindow 中。为了在某​​些视图上方显示内容,您需要有一个单独的 UIWindow。尝试在 UIPopoverController 上显示视图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 2015-06-26
    相关资源
    最近更新 更多