UIView in UIScrollView ziehen

Ich versuche, ein grundlegendes Problem mit Drag & Drop auf dem iPhone zu lösen. Hier ist mein Setup:

Ich habe eine UIScrollView mit einer großen Inhalts-Unteransicht (ich kann scrollen und zoomen)Die Inhalts-Unteransicht enthält mehrere kleine Kacheln als Unteransichten, die darin verschoben werden sollten.

Meine UIScrollView-Unterklasse hat diese Methode:

- (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];
    }
}

Die Inhalts-Unteransicht hat diese Methode:

- (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;
}

Die Kachelansicht hat folgende Methode:

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

    self.center = location;
}

Das funktioniert, ist aber nicht ganz korrekt: Die Kachel fällt während des Ziehvorgangs manchmal herunter. Genauer gesagt, es werden keine touchesMoved: -Aufrufe mehr empfangen, und die Bildlaufansicht beginnt stattdessen mit dem Bildlauf. Mir ist aufgefallen, dass dies von der Ziehgeschwindigkeit abhängt: Je schneller ich ziehe, desto schneller "fällt" das Plättchen.

Irgendwelche Ideen, wie man die Fliese am ziehenden Finger kleben lässt?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage