Реализуйте скорость в пользовательском UIGestureRecognizer - PullRequest
2 голосов
/ 07 марта 2012

Я написал собственный UIGestureRecognizer, который обрабатывает вращения одним пальцем. Он предназначен для работы точно так же, как Apples UIRotationGestureRecognizer и возвращает те же значения, что и он.

Теперь я хотел бы реализовать скорость, но не могу понять, как Apple определяет и рассчитывает скорость для распознавателя жестов. Кто-нибудь знает, как Apple реализует это в UIRotationGestureRecognizer?

1 Ответ

4 голосов
/ 07 марта 2012

Вы должны сохранить ссылку на позицию последнего касания и ее отметку времени.

double last_timestamp;
CGPoint last_position;

Тогда вы можете сделать что-то вроде:

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

    last_timestamp = CFAbsoluteTimeGetCurrent();

    UITouch *aTouch = [touches anyObject];
    last_position = [aTouch locationInView: self];
}


-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

    double current_time = CFAbsoluteTimeGetCurrent();

    double elapsed_time = current_time - last_timestamp;

    last_timestamp = current_time;

    UITouch *aTouch = [touches anyObject];
    CGPoint location = [aTouch locationInView:self.superview];

    CGFloat dx = location.x - last_position.x;
    CGFloat dy = location.y - last_position.y;

    CGFloat path_travelled = sqrt(dx*dx+dy*dy);

    CGFloat sime_kind_of_velocity = path_travelled/elapsed_time;

    NSLog (@"v=%.2f", sime_kind_of_velocity);

    last_position = location;
}

Это должно дать вам некоторую скоростьссылка.

...