Я предполагаю, что вы хотите знать скорость между последовательными движениями, а не среднюю величину за серию движений.Теория должна быть достаточно простой для адаптации, если у вас есть другие требования.
Вам нужно знать три вещи:
- Где сейчас касание?
- Где раньше было касание?
- Сколько времени прошло с тех пор?
Тогда просто используйте Пифагор, чтобы получить дистанцию, и поделите на время для скорости.
Когда вы получите 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 делает этовещи.Я уверен, что кто-то может исправить это при необходимости!
Удачи, Замораживание.