По сути, вы захотите сделать это, поместив UIGestureRecognizer в каждое представление, которое вы хотите перетащить. В селекторе, который вызывает распознаватель, вам нужно обрабатывать каждый тип состояния в операторе switch, аналогично следующему:
- (void)handleDragging:(UILongPressGestureRecognizer *)gestureRecognizer
{
switch ([gestureRecognizer state])
{
case UIGestureRecognizerStateBegan:
[self startDragging:gestureRecognizer];
break;
case UIGestureRecognizerStateChanged:
[self doDrag:gestureRecognizer];
break;
case UIGestureRecognizerStateEnded:
case UIGestureRecognizerStateCancelled:
case UIGestureRecognizerStateFailed:
[self stopDragging:gestureRecognizer];
break;
default:
break;
}
}
Это обеспечит 3 точки входа. Я бы порекомендовал в startDrag: удалить представление из представления прокрутки (если оно внутри него) и добавить его в суперпредставление всего, чтобы оно было сверху при перетаскивании. В doDrag: вы захотите переместить местоположение представления в положение жеста. Наконец, в stopDragging: вы захотите добавить представление к любому представлению, над которым оно находится (представление прокрутки или иным образом) в правильном месте.