Смахивание iOS-жестом

Я пытаюсь создать простое приложение, в котором пользователь может провести пальцем влево, а затем вправо, удерживая палец на экране. Я хочу подсчитать, сколько полных свайпов они делают, включая изменение направления. Я использую жест uiswipegesture с направлением, но он вызывает действие только тогда, когда это новое движение. Чтобы придать больше смысла, это почти проверка того, сколько раз пользователь может двигать пальцем слева направо и обратно в течение определенного периода времени. На данный момент у меня есть такие методы внутри моего viewdidload

UISwipeGestureRecognizer *oneFingerSwipeLeft = [[UISwipeGestureRecognizer alloc]
                                                 initWithTarget:self
                                                 action:@selector(oneFingerSwipeLeft:)];
[oneFingerSwipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft];
[[self view] addGestureRecognizer:oneFingerSwipeLeft];

а потом это как действие

-(void) oneFingerSwipeLeft:(UIGestureRecognizer*)recognizer {
NSLog(@"user swipped left");
}

Любая помощь будет оценена по достоинству.


person Oli Black    schedule 09.02.2014    source источник
comment
попробуйте использовать «UIPanGesture».   -  person Akhilrajtr    schedule 09.02.2014


Ответы (1)


Я бы сделал что-то вроде этого.

Настройте некоторые переменные для хранения того, что вы отслеживаете:

@property (nonatomic) int swipeCount;
@property (nonatomic) CGPoint previousLocation;

Создайте UIPanGestureRecognizer:

UIPanGestureRecognizer *gesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(didRecognizePanWithGestureRecognizer:)];
[gesture setDelegate:self];
[self.view addGestureRecognizer:gesture];

Обработка обратного вызова

- (void)didRecognizePanWithGestureRecognizer:(UIPanGestureRecognizer *)gestureRecognizer
{
    switch (gestureRecognizer.state)
    {
        case UIGestureRecognizerStateBegan:
            [self handleGestureBeganWithRecognizer:gestureRecognizer];
            break;

        case UIGestureRecognizerStateChanged:
            [self handleGestureChangedWithRecognizer:gestureRecognizer];
            break;

        case UIGestureRecognizerStateEnded:
        case UIGestureRecognizerStateCancelled:
        case UIGestureRecognizerStateFailed:
            [self handleGestureEndedWithRecognizer:gestureRecognizer];
            break;

        default:
            break;
    }
}

Отслеживайте информацию, которую вы хотите захватить, пока пользователь проводит пальцем вперед и назад

- (void)handleGestureBeganWithRecognizer:(UIPanGestureRecognizer *)gestureRecognizer
{
    [self setSwipeCount:0];
    [self setPreviousTouchLocation:[gestureRecognizer locationInView:self.view]];
}

- (void)handleGestureChangedWithRecognizer:(UIPanGestureRecognizer *)gestureRecognizer
{
    CGPoint currentTouchLocation = [gestureRecognizer locationInView:self.view];
    CGFloat delta = currentTouchLocation.x - self.previousTouchLocation.x;
    [self setPreviousTouchLocation:currentTouchLocation];

    //... figure out if they changed directions based on delta positive or negative

}

- (void)handleGestureEndedWithRecognizer:(UIPanGestureRecognizer *)gestureRecognizer
{
    //.... finish up
}
person Joel    schedule 09.02.2014