Я разрабатываю средство просмотра изображений, похожее на приложение «Фотографии».Как правильно обрабатывать вращение UIScrollView, содержащего UIImageViews?
Это UIScrollView с пейджингом, включенным с изображениями, загруженными из Интернета, поэтому я адаптировал части LazyTableImages sample. В представлении прокрутки и в каждом ImageView внутри него есть все установленные флаги маскировки.
Когда я впервые заметил, как изменялись размеры во время вращения, это выглядело хорошо, но как только я начал пытаться взаимодействовать с видом прокрутки, я понял, что мне также пришлось программно изменить размер contentView. Я сделал это, выполнив didRotateFromInterfaceOrientation: на мой взгляд, контроллер.
[self.scrollView setContentSize:CGSizeMake(numberOfImages * portraitWidth, [scrollView bounds].size.height)];
С взаимодействие ведет себя правильно, я тогда обнаружил, что, если бы я смотрел на вторую фотографию и вращают, части как 1-й и 2-й фотографии будут отображаться на экране. Мне также нужно было изменить contentOffset.
Я попытался исправить эти два пути - как с помощью scrollRectToVisible: анимированный метод UIScrollView, так и с целью напрямую установить свойство contentOffset. И я экспериментировал, поставив этот код в реализации как «одношаговых», так и «двухэтапных» ответов на изменения в ориентации. Например:
-(void)didAnimateFirstHalfOfRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
[self.scrollView setContentOffset:CGPointMake(currentlyViewedPhotoIndex * largeImageHeight,0) animated:YES];
Во всех случаях, однако, это просто чертовски чертовски. Либо я ясно вижу, что свиток случился, либо он просто прыгает. Uuuuuuuuuuugly! Есть ли способ сделать это так, чтобы он вел себя так же, как приложение «Фотографии»?