Простой iphone программа генерируется шаблон проекта View-приложение, с несколькими кнопками, и я добавил следующий код:Что делает контроллер просмотра для меня, когда ориентация изменилась?
- (void) showInfo: (UIView *) view {
NSLog(@"view bounds %6.2f %6.2f %6.2f %6.2f", view.bounds.origin.x, view.bounds.origin.y, view.bounds.size.width, view.bounds.size.height);
NSLog(@"view frame %6.2f %6.2f %6.2f %6.2f", view.frame.origin.x, view.frame.origin.y, view.frame.size.width, view.frame.size.height);
NSLog(@"view center %6.2f %6.2f", view.center.x, view.center.y);
}
- (BOOL)shouldAutorotateToInterfaceOrientation: UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
- (void)willRotateToInterfaceOrientation: (UIInterfaceOrientation) toInterfaceOrientation duration:(NSTimeInterval) duration {
switch(toInterfaceOrientation) {
case UIInterfaceOrientationPortrait:
[self showInfo: self.view];
break;
case UIInterfaceOrientationLandscapeLeft:
[self showInfo: self.view];
break;
case UIInterfaceOrientationLandscapeRight:
[self showInfo: self.view];
break;
}
}
- (void) didRotateFromInterfaceOrientation: (UIInterfaceOrientation) fromInterfaceOrientation {
switch(fromInterfaceOrientation) {
case UIInterfaceOrientationPortrait:
[self showInfo: self.view];
break;
case UIInterfaceOrientationLandscapeLeft:
[self showInfo: self.view];
break;
case UIInterfaceOrientationLandscapeRight:
[self showInfo: self.view];
break;
}
}
Запуск имитатор в портретном, изменение ландшафта справа. Я могу получить:
вида ограничивающий 0,00 0,00 320,00 460,00
вида кадр 0,00 20,00 320,00 460,00
вид центр 160,00 250,00
В портретном, размере вида не 320x460, и это происхождение (0,20) из-за статус бар.
вид оценки 0,00 0,00 480,00 300,00
вид рамы 0,00 0,00 300,00 480,00
вид центр 150.00 240.00
В ландшафтном справа, размеров границ изменяется на 480x300, однако, происхождение кадра (0, 0). И размер рамки отличается от границ.
В моей голове, я полагаю, что эти координаты как следующие изображения:
Мой вопрос: в ландшафтном справа, кажется, что врезки точки происхождения в одном месте в то время как границы «происхождения» относятся к другому. Поэтому я думаю, что где-то в контроллере просмотра происходит некоторое вращение. Где это и что он делает?
Спасибо, что прочитали этот длинный и не столь ясный вопрос. :)
В документе apple, Руководство по программированию контроллера для iOS в разделе Реагирование на изменения ориентации в одном шаге: # Окно регулирует границы вида контроллера вида. Это приводит к изменению размера каждого вида в иерархии представлений на основе его маски авторезистировки. – yehnan