Для меня лучше всего не перемещать uiImageView, который находится в просмотре прокрутки, а создать дублированное представление (в контроллере управляющего представления) и переместить его касаниями, затем добавить это в основной вид и затем впоследствии удалить оригинал.
Этот подход также выглядит лучше, если пользователь передумает на полпути и решит не тянуть его в конце концов.
EDIT:
Я проверил свое приложение, чтобы обновить себя, что я делаю, и я тоже не трогался и не заканчивал работу над оригинальным элементом. У меня есть распознаватель жестов для каждого из представлений в режиме просмотра слайдов, и когда он запускается, он сообщает делегату (viewcontroller, который является родителем представления прокрутки), что перетаскивание выполняется. Из переданного объекта я могу получить CGPoint и действовать соответственно:
UILongPressGestureRecognizer *myRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(drag:)];
[myRecognizer setDelegate:self];
[myItemInsideScrollView addGestureRecognizer:myRecognizer];
-(void)drag:(UILongPressGestureRecognizer *)sender {
[self.view bringSubviewToFront:[(UILongPressGestureRecognizer*)sender view]];
CGPoint translatedPoint = [sender locationInView:self.view];
// if we are not already dragging we create the duplicate view
// if we are already dragging just update the location of the duplicate view
// next check if drag has ended and if so call a method to do what we want
if ( dragging ) {
if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) {
[self checkForDragRelease:(CGPoint)translatedPoint];
}
}
}