Местоположение UISwipeGestureRecognizer - PullRequest
4 голосов
/ 20 апреля 2011

Мне нужно вызвать другое событие в зависимости от того, проводит ли пользователь верхнюю часть экрана, середину экрана или нижнюю часть экрана. Я пытаюсь найти лучший / самый простой способ сделать это, так как я почти уверен, что нет способа получить местоположение из UISwipeGestureRecognizer.

Первый вариант - создать свой собственный распознаватель пролистывания, используя методы «прикосновения». Кажется, что это будет очень сложно (например, попытаться провести различие между ударом и перетаскиванием).

Вторая возможность состоит в том, чтобы получить местоположение одним из методов «прикосновений» (например, прикосновения к Beg) и каким-то образом связать его со свайпом. Может быть, установите таймер в touchSegan, а затем, если распознаватель свайпов сработает в течение полсекунды, или около того, я буду знать, что свайп был связан с этим касанием.

Третья возможность, о которой я могу подумать, - это наложить 3 прозрачных подпредставления поверх моего представления и добавить разные распознаватели пролистывания для каждого представления. Это кажется мне лучшим способом, за исключением того, что прозрачные представления не распознают события касания / смахивания. Так как я могу обойти это?

Есть предложения? Спасибо.

Ответы [ 2 ]

12 голосов
/ 20 апреля 2011

Возможно, вы используете метод locationOfTouch UISwipeGestureRecognizer.

CGPoint pt = [recognizer locationOfTouch:0 inView:view];

Я полагаю, что это даст вам исходные координаты x, y касания, инициировавшего жест.

0 голосов
/ 05 мая 2011

Я использовал вашу третью технику в одном из моих проектов. Прозрачный вид DO распознает жесты. Вот код, который я использовал, может быть, вы что-то забыли.

-(id) initWithPageList:(id<PageListDisplayerDelegate>) iDelegate {
    self = [super init];
    if (self) {
        // Custom initialization
        self.delegate = iDelegate;
        UISwipeGestureRecognizer* swipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(viewSwiped:)];
        swipeRecognizer.direction = UISwipeGestureRecognizerDirectionRight | UISwipeGestureRecognizerDirectionLeft;
        [self.view addGestureRecognizer:swipeRecognizer];
        [swipeRecognizer release];
    }
    return self;

}

-(void) viewSwiped:(UISwipeGestureRecognizer*) sender {
    NSLog(@"View Swiped");
}
...