web-dev-qa-db-ja.com

UIScrollView内のUIWebViewでズームインを有効にするにはどうすればよいですか?

UIWebViewの中にUIScrollViewがあります(scrollviewには別のコンポーネントが含まれています)

UIWebViewInterface BuilderまたはProgrammaticの両方でマルチタッチを有効にしようとしましたが、htmlでズームできません。両方でズームインを処理する必要がありますかUIScrollViewおよびUIWebView?または私が設定する必要がないものは何ですか?

132
calendarw

UIWebViewで機能するには、ピンチとズームのscalesPageToFit = YESを設定する必要があります

347
john geshrick

OK、上記の両方を行う必要がありますが、以下も行います。メインビューにWebビューがありましたが、機能しませんでした。

  1. 上記のように、最初にメインビューにUIScrollViewを配置し、次にスクロールビューにWebビューを配置する必要があります。
  2. 上記のように、<UIScrollViewDelegate> View Controllerで、スクロールビューデリゲートをInterface BuilderのView Controllerにドラッグし、viewForZoomingInScrollViewメソッドを実装します。これは、UIScrollViewへのポインターを返す必要があります(myScrollViewを返します)。
  3. Webビューとスクロールビューの両方にIBOutletプロパティを作成しました-NIBでView Controllerにリンクします。
  4. スクロールビューで、[属性インスペクター]に移動し、最大ズームファクターと最小ズームファクターを設定します(0.5から5.0に設定するとうまくいきます)。
  5. Webビューの属性インスペクターで:
  6. [Webビュー]セクションで、[ページを合わせる]を選択します
  7. 「表示」セクションで、「モード」で「左上」を選択します
  8. 下部の[表示]セクションで、[ユーザーインタラクションが有効]および[マルチタッチが有効]をオフにします。
12
Jay Imerman

JavaScriptを使用すると、ズームレベルを制御できますが、私が見つけた神聖な解決策は滑らかに見えません。

<head>にあるとします:

<meta id="vp" name="viewport" content="width=768,initial-scale=1.0">

4倍にズームし、ユーザーがズームを変更できるようにするには、コンテンツを2回変更します。

var vp = document.getElementById('vp');
vp.content = "width=767,minimum-scale=4.0,maximum-scale=4.0,user-scalable=yes";
vp.content = "width=768,minimum-scale=0.25,maximum-scale=10.0,user-scalable=yes";

幅の切り替えは非常に重要です-そうでない場合、Mobile Safariには深刻な再描画のバグがあります(過剰最適化のため)。

initial-scaleを再度設定することはできません。2回目は無視されます。

3
robocat

コントローラにviewForZoomingInScrollViewメソッドを実装する必要があります。実装しないと、ズームは何もしません。 (なぜこれが必要なのか本当にわかりませんが、そこに行きます。)

詳細については、 http://developer.Apple.com/iphone/library/documentation/WindowsViews/Conceptual/UIScrollView_pg/ZoomZoom/ZoomZoom.html を参照してください。

2
apenwarr