生成された html テーブルを表示する UIWebView があります。ユーザーが HTML テーブルのセルをタップすると、アプリはタップしたセルとタップ位置の (x,y) 座標を認識して、その時点でポップオーバーを表示できるようにする必要があります。
UIWebView デリゲートに shouldStartLoadWithRequest を実装しました。私の Web ページでは、次のように、タッチ イベントをキャプチャし、URL 要求でタッチ ポイントの (x,y) 座標を渡す JavaScript コードを埋め込みました。
var x, y;
function init()
{
// Add an event listener for touch events - set x and y to the coordinate of the touch point
document.addEventListener('touchstart', function(event) {
x = event.touches[0].clientX;
y = event.touches[0].clientY;
}, false);
}
function cellTapped(event)
{
window.location.href="file://myapp/dostuff?x=" + x + "&y=" + y;
}
私の html テーブルでは、各セルが cellTapped() を呼び出す onclick イベントを取得します。
<td onclick="cellTapped(event)">...</td>
したがって、ユーザーが UIWebView のどこかをタッチすると、タッチ ポイントの座標が取得され、x と y に保存されます。テーブル セルの 1 つでタッチすると、タッチ イベント (x と y を設定) を受け取り、cellTapped() が呼び出されて window.location.href を設定し、(x,y) 座標をアプリに渡します。
これはすべて美しく機能します。ユーザーが UIWebView をズームまたはスクロールしていない限り。ズームまたはスクロールすると、event.touches[0].clientX および event.touches[0].clientY から取得した x 座標と y 座標は、さまざまなピクセル数だけずれています (ズームの量と方法によって異なります)。 Web ビューが上下または左右にスクロールされます)。
それに応じて x 座標と y 座標を調整できるように、Web ビューのズーム率とスクロール位置を決定する方法はありますか? UIScrollViewのzoomScale
およびcontentOffset
プロパティは、UIWebView では公開されていないようです。