2010-05-12 4 views
1

Я разрабатываю средство просмотра изображений, похожее на приложение «Фотографии».Как правильно обрабатывать вращение 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! Есть ли способ сделать это так, чтобы он вел себя так же, как приложение «Фотографии»?

ответ

4

То, что я сделал, вместо этого - перед началом вращения, скрыть UIScrollView и создать UIImageView, который содержит просматриваемое в данный момент изображение. Поверните, это изображение повернет все красивое и красивое, и когда завершение вращения удалит ImageView и отобразит вид прокрутки.

Обновление - если вы читаете это сегодня (в любое время после iOS 6), используйте UIPageViewController и установите переходStyle в UIPageViewControllerTransitionStyleScroll для критических ситуаций.

1

Я сделал что-то немного другое, столкнувшись с той же проблемой. В willRotateToInterfaceOrientation:duration: я скрываю все подпрограммы UIScrollView, за исключением отображаемого в данный момент subview, и в didRotateFromInterfaceOrientation: Я отображаю подпункты.

Смежные вопросы