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