iPhone: как перерисовать подпредставления, а также увеличить масштаб просмотра uiscrollview - PullRequest
1 голос
/ 05 февраля 2010

Я разрабатываю приложение для iPhone, которое помещает несколько пользовательских UIViews как подпредставления в UIScrollView. Подвиды располагаются друг над другом как прозрачные виды, так как каждый вид имеет свои собственные процедуры рисования, которые отслеживают части базового вида. Базовое представление - это UIImageView, которое обычно представляет собой большое изображение, и я хочу, чтобы пользователь мог панорамировать и увеличивать и уменьшать масштаб.

Проблема, с которой я сталкиваюсь, заключается в том, что при увеличении и уменьшении масштаба моего UIScrollView подпредставления не перерисовываются, пока пользователь масштабирует. Я могу правильно изменить положение и масштабировать подпредставления, как только масштабирование будет завершено, но пользовательский опыт ниже, чем хотелось бы. Мне не удалось найти способ скрыть или перерисовать подпредставления, поскольку происходит масштабирование для масштабирования подпредставлений вместе с ImageView.

Есть идеи?

спасибо!

Вот код, который я реализовал:

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale {

 for (UIView *view in subViews)
 {
  [view updateView:scale];
 }
}

- (UIView *)viewForZoomingInScrollView:(UIScrollView *) scrollView {
 return imageView;
}

Ответы [ 3 ]

1 голос
/ 19 мая 2010

В> = 3.2 теперь есть: - (void) scrollViewDidZoom: (UIScrollView *) scrollView

Так что когда-нибудь в будущем это будет разумное решение для этого.

1 голос
/ 19 мая 2010

Значение imageView, которое вы возвращаете с viewForZoomingInScrollView:, будет изменено по мере увеличения изображения. Вы можете внедрить setFrame: или более стандартный layoutSubviews в этом представлении для обновления. contentSize вида прокрутки также постоянно обновляется во время масштабирования, поэтому вы можете реализовать setContentSize: в пользовательском представлении прокрутки.

0 голосов
/ 05 февраля 2010

Я не знаю правильного способа его реализации, но у меня есть обходной путь для вас:

Поскольку viewForZoomingInScrollView вызывается непосредственно перед увеличением, а scrollViewDidEndZooming - сразу после, вы можете использовать viewForZoomingInScrollView для вызова метода в отдельном потоке. Этот метод будет проверять zoomScale ваших UIScrollView каждые 100 миллисекунд (или любой другой период, который будет выглядеть хорошо) и внесет все необходимые изменения. В scrollViewDidEndZooming вы остановите выполнение нового метода.

...