Мне трудно это понять.
У меня есть UIScrollView с включенной подкачкой страниц. Он управляется контроллером представления (MainViewController), а каждая страница управляется PageViewController, его представление добавляется как подпредставление scrollView с соответствующим смещением. Прокрутка влево-вправо для приложения iPhone со стандартной ориентацией. Работает хорошо. В основном точно так же, как образец, предоставленный Apple, а также как приложение Weather, поставляемое с iPhone.
Однако, когда я пытаюсь поддерживать другие ориентации, вещи работают не очень хорошо. Я поддерживал каждую ориентацию в MainViewController и PageViewController с помощью этого метода:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
Однако, когда я поворачиваю устройство, мои страницы становятся довольно искаженными, и появляется много глюков рисования, особенно если загружены только некоторые страницы, тогда я поворачиваюсь, затем прокручиваю больше и т.д. ... Очень грязно .
Я сказал, что мои взгляды поддерживают автоматическое изменение размера с
theView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
Но безрезультатно. Кажется, это просто растягивает и искажает мои взгляды.
В моем MainViewController я добавил эту строку в попытке изменить размеры просмотров всех моих страниц:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * ([self.viewControllers count]), self.scrollView.frame.size.height);
for (int i = 0; i < [self.viewControllers count]; i++) {
PageViewController *controller = [self.viewControllers objectAtIndex:i];
if ((NSNull *)controller == [NSNull null])
continue;
NSLog(@"Changing frame: %d", i);
CGRect frame = self.scrollView.frame;
frame.origin.x = frame.size.width * i;
frame.origin.y = 0;
controller.view.frame = frame;
}
}
Но это не очень помогло (потому что я лениво загружаю представления, поэтому не все они обязательно загружаются при выполнении).
Есть ли способ решить эту проблему?