Простая программа для iphone, сгенерированная шаблоном проекта View-Application, с несколькими кнопками, и я добавил следующий код:
- (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). И размер рамки отличается от границ.
Я представляю себе, что эти координаты похожи на следующие картинки:


Мой вопрос таков: в альбомной ориентации кажется, что источник фрейма указывает на одно местоположение, а источник границ указывает на другое. Поэтому я думаю, что где-то в контроллере представления происходит вращение. Где это и для чего это нужно?
Спасибо за чтение этого длинного и не очень ясного вопроса. :)