Ограничить область прокрутки uiscrollview

#iphone #uiscrollview #zooming

#iPhone #uiscrollview #масштабирование

Вопрос:

У меня есть изображение с несколькими частями. Я попытаюсь объяснить с помощью следующей диаграммы:

 --|----------|---------|---
  |   1      |   2     |
  |          |         |
--|----------|---------|---
  |   3      |   4     |
  |          |         |
--|----------|---------|---
  

На приведенной выше диаграмме 1,2,3 и 4 представлены разделы большого изображения. Я использую UIImageView в UIScrollView. Я показываю пользователю по одной части за раз. Чтобы казалось, что разделы представляют собой отдельные изображения. Если я показываю раздел 3, я скрываю все части изображения, кроме раздела 3, и изменяю координату изображения таким образом, чтобы раздел 3 отображался в середине экрана. До сих пор все работает нормально. Теперь мне нужно реализовать масштабирование разделов. После масштабирования раздела пользователю будет разрешено прокручивать только внутри раздела, и им не будет разрешено прокручивать за пределами увеличенного раздела. Я не могу реализовать это так, как если бы я установил свойство contentoffset и contentsize для uiscrollview, оно выводит изображение с экрана.

Может кто-нибудь подсказать мне, как это реализовать?

Ниже приведен код, который я использую для позиционирования scrollview.

 - (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
    float updatedCurrFrameX = originalFrame.origin.x*[scroll zoomScale];
    float updatedCurrFrameY = originalFrame.origin.y*[scroll zoomScale];
    float updatedCurrFrameWidth = originalFrame.size.width*[scroll zoomScale];
    float updatedCurrFrameHeight = originalFrame.size.height*[scroll zoomScale];

    CGRect visibleRect=CGRectMake(updatedCurrFrameX, updatedCurrFrameY, updatedCurrFrameWidth, updatedCurrFrameHeight);
    scroll.contentSize= visibleRect.size;
    scroll.contentOffset=visibleRect.origin;



}
  

Ответ №1:

Реализовать UIScrollViewDelegate , чтобы получать уведомления при увеличении масштаба пользователя ( scrollViewDidEndZooming:withView:atScale: ), затем действовать соответствующим образом, установив contentSize и contentOffset . Если вы не можете добиться желаемого эффекта путем настройки contentSize и offset, вы можете рассмотреть возможность изменения documentView в ScrollView при увеличении.