Я использую масштабирующий 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
имеет значение false. -touchesEnded: withEvent
. Он никогда не вызывается. Так что я немного растерялся. Кто-нибудь еще пытался сделать что-то подобное?