Как замедлить скорость UIPanGestureRecognizer? - PullRequest
2 голосов
/ 03 марта 2011

У меня есть метод, который я хотел бы вызвать, когда распознается жест панорамирования двумя пальцами.У меня все настроено и работает нормально, но проблема в том, что метод вызывается только 15 раз (он фильтрует изображения), и к тому времени, как я сдвинулся на дюйм, метод был вызвансто раз, и изображения проходили так быстро, что я не знал, что происходит.

Что я могу сделать, чтобы замедлить мой распознаватель жестов?

UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)];
[panRecognizer setMinimumNumberOfTouches:2];
[panRecognizer setMaximumNumberOfTouches:2];
[panRecognizer setDelegate:self];
[self view] addGestureRecognizer:panRecognizer]];

Ответы [ 3 ]

2 голосов
/ 03 марта 2011

Предположительно, вы меняете изображения каждый раз, когда получаете событие панорамирования.Это не очень хорошоВместо этого вам следует спросить распознаватель жестов панорамирования о расстоянии перетаскивания (используйте -translationInView:) и изменять изображения только после того, как вы преодолели определенный порог.

0 голосов
/ 26 ноября 2017

Swift 4

@objc func panGestureHandler(_ gesture: UIPanGestureRecognizer) {

    let theViewMinimumY = someValue
    let translation = gesture.translation(in: gesture.view)

    switch gesture.state {

    case .began:
        gesture.setTranslation(CGPoint.zero, in: gesture.view)

    case .changed:

        gesture.setTranslation(CGPoint.zero, in: gesture.view)

        // if the view ever goes beyond a certain point
        if theView.frame.origin.y < theViewMinimumY {

            // only add a fraction of the gesture's translation (in this case 50%)
            theView.center = CGPoint(x: theView.center.x, y: theView.center.y + (translation.y * 0.5))

        } else {

            theView.center = CGPoint(x: theView.center.x, y: theView.center.y + translation.y)

        }

    case .ended:

        ...

    default:
        break

    }

}
0 голосов
/ 14 марта 2014

Я создал «responseCount», в основном захватывая каждый 4-й или 5-й (действительный) жест.

// within method that fires with each gesture:
CGPoint translatedPoint = [(UIPanGestureRecognizer*)panRecognizer translationInView:aView];
if(abs(translatedPoint.x) > 20 || abs(translatedPoint.y) > 20){
    if(responseCount == 4){
        // do animation/response
        responseCount = 0;
    } else {
        responseCount += 1;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...