我想知道我是不是太过于复杂了。首先,我想要自己的"刷卡"是获取滑动的开始和结束触摸,以及创建复合手势的能力(多次滑动将被识别为单个手势 - 例如:字形模式识别)。
无论如何,我在touchesMoved期间跟踪指标:但我没有一个好方法来确保用户的触摸是在一条线上,或者即使速度有效。我发现touchesMoved:callback提供了偏离一点点的触摸样本(touchesMoved:样本包含偏差超过50%)。我在touchesMoved中做到这一点的想法是双重的。一,确保滑动是直的,两个,以便在必要时取消手势。
这是我的感动移动:
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesMoved:touches withEvent:event];
UITouch *currentTouch = (UITouch *)[touches anyObject];
CGPoint curTouchPoint = [self.view.window
convertPoint:[currentTouch locationInView:self.view.window]
toWindow:nil];
CGPoint prevTouchPoint = [self.view.window
convertPoint:[currentTouch previousLocationInView:self.view.window]
toWindow:nil];
// Swipe and touch metrics
CGFloat touchLength = [SwipeGestureRecognizer lineDistanceForStartPoint:prevTouchPoint endPoint:curTouchPoint];
CGFloat touchVelocity = touchLength / (currentTouch.timestamp - _prevTouchTime);
CGFloat touchAngle = [SwipeGestureRecognizer angleForStartPoint:prevTouchPoint endPoint:curTouchPoint];
CGFloat prevTouchVelocity = _prevTouchVelocity;
_prevTouchVelocity *= _sampleWeight;
_prevTouchVelocity += (1.0f - _sampleWeight) * touchVelocity;
CGFloat prevTouchAngle = _prevTouchAngle;
_prevTouchAngle *= _sampleWeight;
_prevTouchAngle += (1.0f - _sampleWeight) * touchAngle;
_prevTouchTime = currentTouch.timestamp;
}
此时我不确定如何"验证"滑动。我知道像速度这样的东西可能是主观的,但我希望你们中的一些专业人士之前已经做过这些并且有一些意见。