Я использую UIScrollView для увеличения, чтобы показывать изображения в приложении для iPad. Масштабирование работает отлично, с помощью щепотки, уменьшая или увеличивая изображение в зависимости от ситуации. Я также включил bouncesZoom
, чтобы он возвращался к минимальному или максимальному зуму, если пользователь слишком сильно растягивает его в ту или иную сторону.
Теперь я хотел бы узнать, когда пинч закончился с изображением, на 10% меньшим, чем минимальный размер зума, и, в таком случае, предотвратить скачок и вызвать другую анимацию, которая сжимает изображение до «закрыть». " Это. Таким образом, может быть что-то вроде жеста «ущипнуть, чтобы закрыть». Что я придумала, чтобы сделать это, в простейшем случае, это:
- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
if (self.zoomBouncing && zoomedToScale / self.minimumZoomScale < 0.90) {
// We've let go and were under 90% of the minimum size.
self.minimumZoomScale = zoomedToScale;
[self shrinkImageToNothing];
} else {
// How far have we gone?
zoomedToScale = self.zoomScale;
}
}
Это прекрасно работает, за исключением того, что на данный момент он уже подпрыгивает, поэтому настройка minimumZoomScale
ничего не делает. Поэтому отскок и сжатие происходят одновременно, что, как вы можете себе представить, выглядит довольно странно.
Итак, мой вопрос: как я могу предотвратить отскок, происходящий только в этой конкретной ситуации? Не существует метода UIScrollViewDelegate, который позволял бы моему коду делать что-то между тем, когда жест завершается, и когда UIScrollView решает отскочить назад. Я попробовал кучу других техник без удачи, в том числе:
- Возвращает
nil
из –viewForZoomingInScrollView:
, когда мой порог увеличения 90% был пройден. Не работает, потому что этот метод вызывается, когда начинается жест, а не для каждой точки увеличения.
- Установка
bouncesZoom
в -scrollViewDidZoom:
на false, когда коэффициент масштабирования меньше 90%, и на true, если он больше или равен 90%. Сильно трясет изображение, когда масштаб становится меньше 90%, потому что он запрещает этот размер, когда bouncesZoom
ложно.
- Добавление метода
-touchesEnded:withEvent
. Это никогда не вызывается.
- Добавление моего собственного UIPinchGestureRecognizer для выполнения одновременно с собственным распознавателем пинча в UIScrollView. Не работает, потому что его обработчики (и методы делегата) вызываются после жеста жеста UIScrollView, который принимает решение отскочить до того, как мой жест может сказать это не слишком. Я попытался удалить все основные жесты, добавить свои и добавить основные жесты обратно. Но мой жест был все еще вызванным после того, как UIScrollView решил, что он подпрыгивает.
Так что я немного растерялся. Кто-нибудь еще пытался сделать что-то подобное?