UIWebView
DOM 要素を longTap したときに (SVG グラフから) DOM 要素のプロパティにアクセスする必要があります。UILongPressGestureRecognizer
そのために、次のように追加しました。
UILongPressGestureRecognizer* longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action: @selector(longPress:)];
[self.webView addGestureRecognizer: longPress];
ビューを longPress すると、JS 関数を呼び出すハンドラーが呼び出されます。
- (void) longPress: (UIGestureRecognizer *) gesture {
CGPoint curCoords = [gesture locationInView:self.webView];
if (!CGPointEqualToPoint(curCoords, self.lastLongPress)) {
self.lastLongPress = curCoords;
[self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"longPress(%f, %f)", curCoords.x, curCoords.y]];
}
}
これは私の JS ハンドラです:
function longPress(x, y) {
x = x + window.pageXOffset;
y = y + window.pageYOffset;
var element = svgDocument.elementFromPoint(x, y);
alert(element.localName + ' ' + x + ' ' + y + ' ' + window.innerWidth + ' ' + window.innerHeight);
}
ただし、UIWebView
座標は != DOM 座標からのようです (クリックした場所は、アラートに表示される localName に対応していません)。座標と JSの間に +/- 1.4 の係数があることがわかりましたUIWebView
(画面の右下をクリックして、これらの値をwindow.innder{Width,Height}
.
私の推測ではUIWebView
、最初はデフォルトのズーム率が適用される可能性がありますが、この値が何に対応するのかわかりません。
さらに、ユーザーが実際にページをズーム/移動したときにこれを機能させる方法も必要です。
誰かが私が間違っていることを知っていますか?
ありがとう、