Я решил свою проблему следующим образом. Когда подпредставление прокрутки получает touchesBegan: withEvent: я устанавливаю альфа этого подпредставления на 0.0. Затем я создаю идентичное подпредставление и добавляю его в суперпредставление прокрутки. Для начальной позиции я использую следующее:
CGPoint newOrigin = [self origin];
newOrigin.x = newOrigin.x + [[self superview] origin].x;
newOrigin.y = newOrigin.y + [[self superview] origin].y - [(UIScrollView*)[self superview] contentOffset].y;
[newSubview setOrigin: newOrigin]; // setOrigin is defined in a category on UIView - it does what you'd expect
(Примечание: если вы не компенсируете смещение содержимого прокрутки, вы можете получить удивительное поведение ...)
Мой метод touchesMoved: withEvent перемещает подпредставление (как обычно для реализации перетаскивания), а затем touchesEnded: withEvent удаляет дополнительное подпредставление из суперпредставления прокрутки и устанавливает альфа начального подпредставления обратно в 1,0. Так что, по сути, дополнительное подпредставление копает невидимое подпредставление.