Я пытаюсь решить основную проблему с перетаскиванием на iPhone. Здесь моя настройка:
- У меня есть UIScrollView, у которого есть один большой просмотр содержимого (я могу прокручивать и масштабировать его).
- В subview для контента есть несколько небольших фрагментов, которые должны быть перемещены внутри него.
Мой подкласс 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;
}
Это работает, но не полностью корректно: плитка иногда "падает" во время процесса перетаскивания. Точнее, он перестает получать штрихи. Вместо этого запускается прокрутка: вызовы и прокрутка. Я заметил, что это зависит от скорости перетаскивания: чем быстрее я перетаскиваю, тем быстрее "падает".
Любые идеи о том, как сохранить плиту, приклеенную к перетаскивающему пальцу?