“Неправильный” кадр / размер окна после переориентации в iPhone

В моем приложении iPhone OS я хочу (должен) наблюдать за изменениями в ориентации устройства для реконструкции определенных частей экрана. Подход, который я использовал, должен был использовать CGRect frame = [UIScreen mainScreen].applicationFrame получить размер экрана и оттуда вычислить размер и / или расположение других средств управления (я также попробовал self.view.frame).

Все тестирование было сделано до сих пор в Режиме портрета, таким образом, я мог сфокусироваться на программировании основных функций и позже просто сделать некоторые корректировки к Среде. И здесь вводит проблему: В -(void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation Я добавил некоторый вход для проверки размеров перед продолжением, но по-видимому значения для Ширины и Высоты являются "неправильными" (я говорю "неправильно", потому что на первый взгляд значения не имеют смысла мне).

Вот вывод некоторого входа:

  • Вращение: Среда [w=300.000000, h=480.000000]
  • Вращение: Портрет [w=320.000000, h=460.000000]

Значения для "w" и "h" в Среде кажутся инвертированными мне - я ожидал это w=480 и h=300.

Что я делаю неправильно? Код, который я раньше отлаживал, ниже.

-(void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    CGRect frame = [UIScreen mainScreen].applicationFrame;
    CGSize size = frame.size;

    NSLog(@"%@", [NSString stringWithFormat:@"Rotation: %s [w=%f, h=%f]",  
        UIInterfaceOrientationIsPortrait(self.interfaceOrientation) ? "Portrait" : "Landscape",
        size.width, size.height]);
}
38
задан Rafael Steil 11 May 2012 в 11:16
поделиться

1 ответ

Изменилась ориентация вашего устройства, а не физические характеристики экрана. Вы в основном наклонили его набок, но на самом деле он имеет ширину 320 пикселей (20 из которых вам недоступны в данный момент, так как отображается строка состояния) и 480 пикселей в высоту. Если ваш вид автоматически поворачивается, то ширина / высота были переведены для вас, но когда вы запрашиваете фактические размеры экрана, вы возвращаете фактические размеры экрана.

По этой же причине при работе с переведенными представлениями важно выполнять вычисления на основе центра представления и границ представления, а не на основе кадра представления.

33
ответ дан 27 November 2019 в 03:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: