Я использую масштабирование UIScrollView для отображения изображений в своем приложении для iPad. Масштабирование работает отлично, с щепоткой, делая изображение меньшим или большим, если необходимо. У меня также есть bouncesZoom
, чтобы он отскакивал назад до минимального или максимального увеличения, если пользователь слишком сильно растягивает его так или иначе.Как я могу отменить масштабирование масштабирования UIScrollView?
Теперь я хотел бы узнать, когда пинч закончился с изображением на 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 решил, что он подпрыгивает.
Так что я нахожусь в убытке. Кто-нибудь еще пытался сделать что-то подобное?
Что такое shrinkImageToNothing do and where is cachedMinZoomScale get set? – jjxtra