MAUIでiOSアプリの開発!

MAUIを使ったiOSアプリの開発についての技術的なメモです。

Web上でクリックした座標をネイティブ側で取得する

Webを表示するアプリにて、Web画面上でクリックした場所にネイティブで何か表示したい場合、
Web上の座標→ネイティブ上の座標に変換する必要があります。

Web内のJavaScriptでクライアント座標を取得してネイティブ側に通知し、
ネイティブ側でその座標にコントロールを表示させましたが、うまくいきませんでした。(位置がずれる)

調べると、Web画面で拡大・縮小を行っていることが原因でした。

JavaScriptでクライアント座標を取得する際に一緒に拡大率も取得し、
ネイティブ側で座標に拡大率を計算してから表示させることで、期待通りの位置に表示できました。

JavaScriptでWebからネイティブに以下のパラメータを連携します。

 

var data = {};
data["x"] = e.clientX;
data["y"] = e.clientY;
data["s"] = window.visualViewport.scale;
invokeAction(JSON.stringify(data));

ネイティブ側では、パラメータを受け取って以下の計算を行います。

int x = int.Parse(json["x"]);
int y = int.Parse(json["y"]);
double scale = double.Parse(json["s"]);

XXXControl.TranslationX = x * scale;
XXXControl.TranslationY = y * scale;