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?