我想跟踪以像素/秒为单位移动的触摸速度 任何Budy都有这个想法
除了PanGesture方法
答案 0 :(得分:11)
我假设你想知道连续运动之间的速度,而不是一系列运动的平均速度。如果你有其他要求,理论应该很容易适应。
您需要了解三件事:
然后只需使用毕达哥拉斯来获得距离,并按时间划分速度。
当您收到 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的做事方式仍然不太满意。我敢肯定有人可以在必要时纠正它!
祝你好运,冻结。