我正在做一个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
是该tap事件的本机对象表示,并试图看看我能用它做什么,所以我使用了Chrome DevTools,并开始输入e.ios.location
,并获得了locationInView()
自动完成功能。然后我在Apple's documentation中搜索它,发现该函数得到一个UIView
作为参数。所以我尝试了e.ios.locationInView(e.object);
并得到了一个例外,所以我记得UIView
是nativescript的View
类的iOS表示,所以我尝试了e.ios.locationInView(e.object.ios);
并得到了代表视图中的tap坐标的CGPoint
。
值得注意的是,loc.x
和loc.y
属于dp
单位。
对于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