В моем приложении iPhone OS я хочу (должен) наблюдать за изменениями в ориентации устройства для реконструкции определенных частей экрана. Подход, который я использовал, должен был использовать CGRect frame = [UIScreen mainScreen].applicationFrame
получить размер экрана и оттуда вычислить размер и / или расположение других средств управления (я также попробовал self.view.frame
).
Все тестирование было сделано до сих пор в Режиме портрета, таким образом, я мог сфокусироваться на программировании основных функций и позже просто сделать некоторые корректировки к Среде. И здесь вводит проблему: В -(void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
Я добавил некоторый вход для проверки размеров перед продолжением, но по-видимому значения для Ширины и Высоты являются "неправильными" (я говорю "неправильно", потому что на первый взгляд значения не имеют смысла мне).
Вот вывод некоторого входа:
Значения для "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]);
}
Изменилась ориентация вашего устройства, а не физические характеристики экрана. Вы в основном наклонили его набок, но на самом деле он имеет ширину 320 пикселей (20 из которых вам недоступны в данный момент, так как отображается строка состояния) и 480 пикселей в высоту. Если ваш вид автоматически поворачивается, то ширина / высота были переведены для вас, но когда вы запрашиваете фактические размеры экрана, вы возвращаете фактические размеры экрана.
По этой же причине при работе с переведенными представлениями важно выполнять вычисления на основе центра представления и границ представления, а не на основе кадра представления.