Мне сложно с этим справиться.
У меня есть UIScrollView, с поддержкой пейджинга. Он управляется контроллером представления (MainViewController), и каждая страница управляется с помощью PageViewController, его представление добавляется как подзадача scrollView при правильном смещении. Прокрутка влево-вправо, для приложений с ориентацией на стандартную ориентацию. Работает хорошо. В основном точно так же, как образец, предоставленный 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;
}
}
Но это не помогло слишком много (потому что я лениво загружаю представления, поэтому не все из них обязательно загружаются, когда это выполняется).
Есть ли способ решить эту проблему?