我使用这两个功能来检测用户在uiview上慢慢拖放
- (void)touchesBegan:(NSSet *)触及withEvent:(UIEvent *)事件
- (void)touchesMoved:(NSSet *)触及withEvent:(UIEvent *)事件
然而,我如何使用这两种方法来检测用户实际轻弹(快速翻转)uiview?
如何区分电影与拖动?
非常感谢你的帮助!
justicepenny
答案 0 :(得分:4)
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
方法标记beginPoint和beginTime;用于标记endPoint和endTime的ues -(void) touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event
方法。然后计算速度,你可以比较速度和你的阈值。(速度可能只计算水平或垂直)
答案 1 :(得分:1)
我认为你应该检查手势识别器 - 他们需要做很多工作来区分不同的用户触摸。您所描述的是平移和滑动手势。有特定的手势识别器类来处理每个类。 UIGestureRecognizer是父类,你应该先看一下。
答案 2 :(得分:1)
拖动和轻弹通常以速度来区分 - 一种解决方案是根据距离公式创建算法。
一个粗略的例子:
CGPoint pointOld = CGPointMake(0, 0); // Not sure if this is valid
CGPoint pointNew = CGPointMate(0, 0); // Just making holders for the
// location of the current and previous touches
float timeInterval = 0.2f;
// However long you think it will take to have enough of a difference in
// distance to distinguish a flick from a drag
float minFlickDist = 100.0f;
// Minimum distance traveled in timeInterval to be considered a flick
- (void)callMeEveryTimeInterval
{
// Distance formula
float distBtwnPoints = sqrt( (pointNew.x - pointOld.x) * (pointNew.x - pointOld.x) - (pointNew.y - pointOld.y) * (pointNew.y - pointOld.y) );
if (distBtwnPoints >= minFlickDist)
{
// Flick
} else {
// Drag
}
}
我认为可能有用的东西的粗略草图 - 希望有所帮助。