UIPanGestureRecognizer внутри UIScrollView - PullRequest
4 голосов
/ 16 ноября 2011

У меня следующая проблема с 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...
}

Есть ли возможность склеить длинное нажатие и жесты панорамирования, чтобы пользователю не приходилось поднимать палец? Или, может быть, другое решение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...