6

生成された 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 では公開されていないようです。

4

2 に答える 2

2

UIGestureRecognizerDelegate メソッドを使用します。

UIGestureRecognizerDelegate を宣言ファイル (つまり、.h ファイル) に追加します。

ステップ 1:gestureRecognizer のデリゲートを設定するだけです: (.m ファイル内)

UITapGestureRecognizer *webViewTapped = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)];
webViewTapped.numberOfTapsRequired = 1;
webViewTapped.delegate = self;
[webView addGestureRecognizer:webViewTapped];
[webViewTapped release];

ステップ 2: この関数をオーバーライドします: (.m ファイル内)

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}

ステップ 3: 次に、tapAction 関数を実装します。

- (void)tapAction:(UITapGestureRecognizer *)sender
{    
    CGPoint point = [sender locationInView:self.view]; // get x and y from here
}
于 2013-08-13T14:16:45.933 に答える
1

EDIT : iOS 5 以降では、UIWebView の scrollView プロパティが公開され、アクセスできるため、これは問題になりません。私の場合、まだ iOS 4 を実行しているデバイスをサポートする必要があります (信じられないかもしれませんが...)。

my のサブビューをループするUIWebViewことで、基になる を見つけ、UIScrollViewそのzoomScaleおよびcontentOffsetプロパティを使用してズームとスクロールの位置を見つけることができます。

for (UIView *view in myWebView.subviews) 
{
    if ([view isKindOfClass:[UIScrollView class]]) 
    {
        // Get UIScrollView object
        scrollview = (UIScrollView *) view;

        // Find the zoom and scroll offsets
        float zoom = scrollView.zoomScale;
        float xOffset = scrollView.contentOffset.x;
        float yOffset = scrollView.contentOffset.y;
    }
}

基になるオブジェクトを公開しない理由があると思うので、Apple がアプリ ストアへの提出を承認するかどうかはわかりませんがUIScrollView、問題は解決します。とにかく、私のアプリはエンタープライズ ライセンスで配布されているので、アプリ ストアへの提出は私にとって問題ではありません。

于 2014-05-08T13:53:10.853 に答える