У меня следующая проблема с UIPanGestureRecognizer
внутри UIScrollView
:
UIScrollView *sv = [[UIScrollView alloc] initWithFrame:CGRectMake(200, 200, 200, 200)];
sv.contentSize = CGSizeMake(200, 100 *100);
for (int i = 0; i < 100; i++) {
UIView *newView = [[UIView alloc] initWithFrame:CGRectMake(0, i * 100, 200, 100)];
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panTile:)];
[panGesture setDelegate:self];
[panGesture setEnabled:FALSE];
[newView addGestureRecognizer:panGesture];
UILongPressGestureRecognizer *longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
[longPressRecognizer setDelegate:self];
[newView addGestureRecognizer:longPressRecognizer];
[sv addSubview:newView];
}
Полный вид прокрутки заполнен маленькими плитками, каждая из которых реализует жест панорамирования, чтобы сделать их перетаскиваемыми. Проблема в том, что при этом предотвращается прокрутка в представлении прокрутки. Перетаскивание плитки вместо этого работает отлично. Когда я отключаю жесты панорамирования плиток, прокрутка работает отлично. Жест панорамирования плитки несколько скрывает собственный жест панорамирования. Моя идея заключалась в том, чтобы отключить жест панорамирования с самого начала. Жест активируется, когда пользователь делает длинное нажатие на плитки. Проблема в том, что пользователь должен поднять палец, а затем снова коснуться плитки, чтобы перетащить ее. Когда перетаскивание закончено, я включаю долгое нажатие и снова отключаю жест панорамирования. Итак, longPress:
выглядит следующим образом:
- (void)longPress:(UILongPressGestureRecognizer *) gestureRecognizer {
for (UIGestureRecognizer *r in gestureRecognizer.view.gestureRecognizers) {
if ([r isKindOfClass:[UIPanGestureRecognizer class]]) {
[r setEnabled:TRUE];
}
}
//pan gesture should take over here...
}
Есть ли возможность склеить длинное нажатие и жесты панорамирования, чтобы пользователю не приходилось поднимать палец? Или, может быть, другое решение?