У меня есть tabBarController с 4 представлениями. Я хотел, чтобы вращался второй вид, поэтому я добавил
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return YES;
}
ко всем моим 4 viewControllers. Теперь каждый вид может вращаться, и это хорошо.
Второй вид отлично работает при вращении, он отлично справляется с изменением размера и перерисовкой его содержимого (пока другие представления вращаются, но не обновляют их содержимое, я буду работать над этим)
Проблема в том, что, если я остаюсь в первом представлении, поворачиваю телефон, а затем перехожу во второе представление, все содержимое изменяется странным образом.
Например, у меня есть scrollView на втором экране, охватывающем весь экран. Когда я поворачиваю телефон, оставаясь на втором экране, он изменяет размер прокрутки, чтобы соответствовать экрану ландшафта, все в порядке. Но если я поверну телефон, оставаясь в первом виде (или в третьем, или в четвертом), вид прокрутки станет маленьким, меньше половины экрана.
Для изменения размера и перерисовки содержимого я использую:
- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[self adjustViewsForOrientation:toInterfaceOrientation]; }
- (void) adjustViewsForOrientation:(UIInterfaceOrientation)orientation {
if (orientation == UIInterfaceOrientationLandscapeLeft ||
orientation == UIInterfaceOrientationLandscapeRight) {
sfondo.frame = CGRectMake(0, 0, 480, 260);
scrollView.frame = CGRectMake(0, 0, 480, 250);
scrollView.contentSize = CGSizeMake(480,1000);
for (int i=0; i<3; i++) {
[[grafici objectAtIndex:i] landscapeMode:TRUE];
}
}
else if (orientation == UIInterfaceOrientationPortrait ||
orientation == UIInterfaceOrientationPortraitUpsideDown) {
sfondo.frame = CGRectMake(0, 0, 320, 411);
scrollView.frame = CGRectMake(0, 0, 320, 411);
scrollView.contentSize = CGSizeMake(320,1100);
for (int i=0; i<3; i++) {
[[grafici objectAtIndex:i] landscapeMode:FALSE];
}
}
}