2010-03-21 2 views
0

Я пытаюсь перетащить UIViews в UIScrollView. Я бы хотел, чтобы UIScrollView прокручивал, если я перетаскиваю UIView так, чтобы он пересекал верхнюю или нижнюю часть ScrollView. Если он касается верхней части, он должен прокручиваться вверх. Если он касается дна, он должен прокрутиться вниз. Когда UIView перемещается таким образом, что он больше не пересекает верхнюю или нижнюю часть, прокрутка должна останавливаться.Как использовать перетаскивание в UIScrollView

Первый подход, который я пытался, заключался в том, чтобы запустить NSTimer всякий раз, когда я обнаружил, что UIView пересекается с верхней или нижней частью прокрутки. Таймер будет прокручивать UIScrollView по частям, пока не будет признан недействительным. Это привело к очень резкой прокрутке, поскольку невозможно предсказать, когда будут срабатывать таймеры.

Мой текущий подход просто прокручивать весь путь к верхней или нижней части ScrollView, как это:

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
[UIView setAnimationDuration:1.0]; 
[self.parentScrollview setContentOffset:newOffset animated:NO]; 
[UIView commitAnimations]; 

Для того, чтобы остановить прокрутку, я стараюсь, чтобы определить положение прикосновения в touchhesMoved: делегировать и использовать это для вычисления contentOffset для использования в scrollView.

Проблема заключается в том, что когда я пытаюсь получить местоположение в представлении через [[касается anyObject] locationInView: self], я получаю конечное конечное местоположение, а не текущее местоположение. Я предполагаю, что это потому, что contentOffset в scrollView установлен сразу.

Есть ли способ получить фактическое местоположение прикосновения в такой ситуации? Или любой другой способ установить contentOffset, когда я прерываю анимацию прокрутки?

ответ

0

Это может быть поздно, но вы можете попытаться прервать старую анимацию с новой анимацией, включая это заявление:

[UIView setAnimationBeginsFromCurrentState:YES]; 

Вы могли бы сделать новые анимации очень короткий или нулевой длительности, а затем установить делегата и setAnimationDidStopSelector, чтобы получить окончательное значение contentOffset.

Смежные вопросы