Перетаскивание UIView внутри UIScrollView

Я пытаюсь решить основную проблему с перетаскиванием на iPhone. Вот мои настройки:

У меня есть UIScrollView, который имеет одно большое подпредставление контента (я могу прокрутить и увеличить его)Подвид контента имеет несколько маленьких плиток в виде подпредставлений, которые следует перетаскивать внутри.

Мой подкласс UIScrollView имеет этот метод:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    UIView *tile = [contentView pointInsideTiles:[self convertPoint:point toView:contentView] withEvent:event];
    if (tile) {
        return tile;
    } else {
        return [super hitTest:point withEvent:event];
    }
}

Подвид контента имеет этот метод:

- (UIView *)pointInsideTiles:(CGPoint)point withEvent:(UIEvent *)event {
    for (TileView *tile in tiles) {
        if ([tile pointInside:[self convertPoint:point toView:tile] withEvent:event])
            return tile;
    }

    return nil;
}

И у представления плитки есть этот метод:

- (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event {
    UITouch *touch = [touches anyObject];   
    CGPoint location = [touch locationInView:self.superview];

    self.center = location;
}

Это работает, но не полностью правильно: плитка иногда «падает» во время процесса перетаскивания. Точнее говоря, он перестает получать вызовы touchesMoved: и вместо этого прокручивается представление прокрутки. Я заметил, что это зависит от скорости перетаскивания: чем быстрее я перетаскиваю, тем быстрее плитка «падает».

Любые идеи о том, как держать плитку приклеенной к перетаскивающему пальцу?

Ответы на вопрос(4)

Ваш ответ на вопрос