Изменение положения UIWindow после его поворота

Недавно я сделал собственное оповещение, которое является подклассом 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 по какой-то причине ничего не дает. Кто-нибудь знает, что я могу делать неправильно здесь?


person Ser Pounce    schedule 08.04.2013    source источник


Ответы (1)


В приложении не должно быть более одного UIWindow. Уже есть один. Повторная реализация, создание подклассов из UIView.

Из документов UIWindow: " Если приложение не может отображать содержимое на экране внешнего устройства, приложение имеет только одно окно».

person bshirley    schedule 08.04.2013
comment
Мне нужен UIWindow, чтобы я мог разместить его над строкой состояния, например, UIAlertView. - person Ser Pounce; 08.04.2013
comment
если вы хотите, чтобы строка состояния исчезла, установите ее так, чтобы она исчезла - person bshirley; 10.04.2013
comment
Не хотите, чтобы он ушел, вы знаете, как, когда приходит предупреждение, оно окрашивает экран в черный цвет? Это то, к чему я стремлюсь, и для этого мне нужен UIWindow. - person Ser Pounce; 10.04.2013
comment
либо вы можете сделать это с помощью UIView (правильно измененного размера, переподчиненного), либо отказаться от затемнения строки состояния - пройдите вверх по иерархии представлений в отладчике и посмотрите, что там - person bshirley; 10.04.2013
comment
Apple не ограничивает наличие нескольких UIWindows в приложении, фактически их UIAlertView является UIWindow. Я думаю, что это нормально, чтобы включить его в качестве предупреждения. Выполнение этого как UIView не поместит его в строку состояния, что я хочу, чтобы пользователь знал, что остальная часть пользовательского интерфейса отключена. - person Ser Pounce; 12.04.2013
comment
Это неверно, UIAlertView является подклассом UIView. И, как указано выше, в документах указывается только одно окно на устройство (подразумевается, что для каждого приложения). - person bshirley; 12.04.2013
comment
Я видел некоторый пользовательский код типа UIAlertView, который не позволяет касаться других вещей, создавая свой собственный цикл обработки событий и управляя всем пользовательским интерфейсом, пока пользователь не коснется одной из его кнопок, а затем вернется к основному четному циклу. - person bshirley; 16.04.2013
comment
Я понимаю, что это довольно старо, но для всех, кто приходит сюда, я хотел бы повторить, что вы МОЖЕТЕ иметь несколько UIWindow в приложении, и на самом деле UIAlertView, хотя сам является UIView, действительно отображается в отдельном UIWindow. Чтобы отображать контент над определенными представлениями, вам НЕОБХОДИМО иметь отдельный UIWindow. Попробуйте отобразить представление над UIPopoverController. - person Harry; 21.03.2014