【问题标题】:Detect all touch locations in View with fast finger movement通过快速手指移动检测视图中的所有触摸位置
【发布时间】:2015-10-23 08:50:48
【问题描述】:

我想知道,是否有办法识别 UITouch 的每个位置。

在 touchesMoved 中跟随我的手指位置:

UITouch *touch = [touches anyObject];
CGPoint p = [touch locationInView:self];

我遇到了问题,如果我快速移动手指,则无法检测到“p”位置。它只是不会读取每个 X 或 Y 位置,但会丢弃一些。

示例: 我正在使用 NSLog 跟踪我的触摸位置,如果我在 iPad 上快速移动手指,NSLog 消息会显示 Y 位置,例如:... 281,301,322,346,375...

【问题讨论】:

    标签: ios objective-c uitouch cgpoint


    【解决方案1】:

    这是框架的内部行为。您可以按照直线的斜率安全地假设中间点。我的意思是你的起始位置是 (x1,y1) 和结束位置是 (x2,y2) 那么你可以找到所有的中间点。

    当你改变方向或路径时,你会在 touchesMoved 中获得新的点。

    【讨论】:

    • 我明白你在说什么。但是还没有找到好的解决方案。如果我的触摸与某些视图发生碰撞,我正在跟踪触摸位置以进行 hitTest。
    【解决方案2】:

    您可以使用以下代码使用手势获取位置

    UILongPressGestureRecognizer *gr = [[UILongPressGestureRecognizer alloc] init];
                [gr addTarget:self action:@selector(userLongPressed:)];
                [self.view addGestureRecognizer:gr];
    

    然后在 userLongPressed 方法中:

    CGPoint point = [recognizer locationInView:self.view];
    

    NSLog 点会给你所有的位置......

    如果您想了解更多信息,请告诉我..

    【讨论】:

    • NSLog 给我 nan 结果,如果我尝试打印 x 和 y 位置?
    • 使用 : if (recognizer.state == UIGestureRecognizerStateChanged) { CGPoint point = [recognizer locationInView:self.view]; }
    • 它的行为很奇怪。有时 x 和 y 的位置低于零,并且它们始终相同。但有时我得到了正确的位置,但结果与使用 touchesMoved 时的结果相同,X 和 Y 位置仍然下降/增加超过 1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多