Я пытаюсь перетащить UIViews в UIScrollView. Я хотел бы, чтобы UIScrollView прокручивал, если я перетаскиваю UIView так, чтобы он пересекал верхнюю или нижнюю часть ScrollView. Если он касается вершины, он должен прокрутиться вверх. Если он касается дна, он должен прокрутиться вниз. Как только UIView переместится так, что он больше не пересекает верх или низ, прокрутка должна прекратиться.
Первый подход, который я попробовал, состоял в том, чтобы запускать NSTimer всякий раз, когда я обнаруживал, что UIView пересекается с верхней или нижней частью прокрутки. Таймер будет прокручивать UIScrollView по крупицам, пока он не станет недействительным. Это привело к очень резкой прокрутке, поскольку невозможно предсказать, когда сработают таймеры.
Мой текущий подход заключается в простой прокрутке до самого верха или низа ScrollView, например:
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:1.0];
[self.parentScrollview setContentOffset:newOffset animated:NO];
[UIView commitAnimations];
Чтобы остановить прокрутку, я пытаюсь определить положение касания в touchesMoved: делегат и использую его для вычисления contentOffset для использования для scrollView.
Проблема в том, что, когда я пытаюсь получить местоположение в представлении через [[затрагивает anyObject] locationInView: self], я получаю конечное конечное местоположение, а не текущее местоположение. Я предполагаю, что это потому, что contentOffset на scrollView устанавливается сразу.
Есть ли способ получить фактическое местоположение касания в такой ситуации? Или любой другой способ установить contentOffset, когда я прерываю анимацию прокрутки?