【问题标题】:I want To track The Speed Of the fingure movement in pixel Per Second Is It Possible Any WaY?我想以每秒像素为单位跟踪手指移动的速度有可能吗?
【发布时间】:2011-02-22 07:30:03
【问题描述】:

我想跟踪以像素/秒为单位移动的触摸速度
任何有这个想法的朋友

PanGesture 方法除外

【问题讨论】:

  • 您能否澄清一下您是指速度还是速度?即,如果用户只用了 1 秒来画一个圆,并在他们开始时完全相同的像素上完成,你会期望答案是 a) 等于该圆的周长/1 秒,还是 b) 零。请注意,b) 的实现将证明要简单得多,但适用于直线。
  • NO 实际上我想要的是 ==>如果我当时将手指移到屏幕上,我需要 PanGesture 中提供的每秒像素变化率,但 Pangesture 不支持ios低于3.2请告诉你有什么想法吗???谢谢你的回复
  • @Dave : 我希望它在整个屏幕上随机移动
  • 您的应用程序是否使用 NSTimer scheduledTimerWithTimeInterval 常规回调?您想要一段时间内的平均速度,还是只需要检测到的每个运动的速度?我只是想弄清楚如何最好地帮助回答您的问题。
  • 我需要每个动作的速度,如果你查看平移手势库会有一个函数 - (CGPoint)velocityInView:(UIView *)view;我想要这样的输出,因为这个方法返回 cgpoint,它是每秒点的变化

标签: iphone iphone-sdk-3.0 touch uitouch


【解决方案1】:

我假设您想知道连续运动之间的速度,而不是一系列运动的平均值。不过,如果您有其他要求,该理论应该很容易适应。

你需要知道三件事:

  1. 现在触摸在哪里?
  2. 之前的触摸在哪里?
  3. 从那以后过去了多少时间?

那么就用毕达哥拉斯来计算你的距离,然后除以时间来计算速度。

当您收到 touchesMoved 事件时,它将为您提供当前和以前的位置。然后,您需要添加的只是时间度量。

为此,您需要在您的类中添加一个 NSDate 属性来帮助计算时间间隔。您可以在 viewDidLoad / viewDidUnload 或类似的地方初始化并释放它。在我的例子中,我的被称为 lastTouchTime,它被保留了,我这样初始化:

self.lastTouchTime = [NSDate date];

我以可预测的方式发布它。

您的 touchesMoved 事件应如下所示:

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

    NSArray *touchesArray = [touches allObjects];
    UITouch *touch;
    CGPoint ptTouch;
    CGPoint ptPrevious;

    NSDate *now = [[NSDate alloc] init];
    NSTimeInterval interval = [now timeIntervalSinceDate:lastTouchTime];
    [lastTouchTime release];
    lastTouchTime = [[NSDate alloc] init];
    [now release];

    touch = [touchesArray objectAtIndex:0];
    ptTouch = [touch locationInView:self.view];
    ptPrevious = [touch previousLocationInView:self.view];

    CGFloat xMove = ptTouch.x - ptPrevious.x;
    CGFloat yMove = ptTouch.y - ptPrevious.y;
    CGFloat distance = sqrt ((xMove * xMove) + (yMove * yMove));

    NSLog (@"TimeInterval:%f", interval);
    NSLog (@"Move:%5.2f, %5.2f", xMove, yMove);
    NSLog (@"Distance:%5.2f", distance);
    NSLog (@"Speed:%5.2f", distance / interval);
}

很抱歉,如果我在任何内存管理方面犯了错误,我仍然对 ObjectiveC 的做事方式不太满意。如果有必要,我相信有人可以纠正它!

祝你好运,结冰。

【讨论】:

    猜你喜欢
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 2014-01-22
    • 1970-01-01
    相关资源
    最近更新 更多