NativeScript Angular - 在点击事件时获取 X 和 Y

NativeScript Angular - Get X and Y on tap event

我正在做一个 Nativescript-Angular-App 但我遇到了问题。

用户必须点击图片上的正确位置。

我不明白如何获取简单点击的坐标。

我可以通过触摸手势 (TouchGestureEventData) 获取坐标,但它提供了信息流。我只想要一个数据。

我试过触摸:

public onTouch(args: TouchGestureEventData) {
     console.log(args.getActivePointers()[0].getX());
}

但是我得到了太多数据(每个动作)。

有没有办法一键获取坐标?

谢谢!

如果你只是想获取单点触摸事件。您可以做的是检查事件操作是 down 操作还是 up 操作。例如,下面的代码只会为您提供触摸事件的 X 和 Y 坐标,并且每个触摸事件只会发生一次。

public onTouch(e: TouchGestureEventData) {
    if (e && e.action === 'down') {
        this.xCoord = e.getX();
        this.yCoord = e.getY();
    }
}

一直在研究这个问题,并在 iOS 中找到了点击事件的方法:

onTap(e) {
    const loc = e.ios.locationInView(e.object.ios);
    console.log("(x,y) in dp: " + loc.x + "," + loc.y);
}  

我发现 e.ios 是那个点击事件的本地对象表示,并试图看看我能用它做什么,所以我使用了 Chrome DevTools,并开始输入 e.ios.location,并得到 locationInView() 自动完成。然后我在 Apple's documentation 中搜索它,发现该函数得到一个 UIView 作为参数。所以我尝试了 e.ios.locationInView(e.object); 并得到了一个异常,所以我记得 UIView 是 nativescript View class 的 iOS 表示,所以我尝试了 e.ios.locationInView(e.object.ios);并得到 CGPoint 表示视图中的点击坐标。
重要的是要注意 loc.xloc.ydp 为单位。

Android 就简单多了:

onTap(e) {
    const x = e.android.getX();
    const y = e.android.getY();
    console.log("(x,y) in pixels: " + x + "," + y);
}  

重要的是要注意,在这种情况下,坐标以 pixel 为单位,因此为了将其转换为 dp,您首先必须 import { screen } from "platform"; 导入的位置,然后为了获得 dp 中的 x 坐标,您将:
e.android.getX() / screen.mainScreen.scale