WKWebViewのサブクラスであるXWalkViewを使用しています。コンテクストビューにサブプログラムとしてプログラムで追加されています。私はWKWebViewのコンテンツページをズームしようとしていますが、最初にズームしません。 WKWebViewはコンテンツのページをズームしたりズームをダブルタップするとWKWebView自体やコンテナビュー(私の推測)&をズームした後、ズームジェスチャをやり直すとコンテンツページがズームされます(これは期待される動作です)。WKWebViewズームが正しく機能しない
質問は、ズームジェスチャーが実行されるたびにWKWebViewのコンテンツページをズームする方法です。
私は以下のように私のViewController.h
にUIScrollViewDelegate
プロトコルに準拠しています:
@interface ViewController : UIViewController<UIScrollViewDelegate, WKNavigationDelegate, WKUIDelegate>
私は以下のようにviewDidLoad
に自己へのデリゲートを設定しています:
xWalkView.scrollView.delegate = self;
設定ズームスケールを以下のようにviewDidLoad
に:
xWalkView.scrollView.minimumZoomScale = 1;
xWalkView.scrollView.maximumZoomScale = 6;
&次のようにViewController.m
のプロトコルメソッドを実装:
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
if (shouldPageNotZoom) {
NSLog(@"viewForZoomingInScrollView YES");
return nil;
} else {
NSLog(@"viewForZoomingInScrollView NO");
return xWalkView.scrollView.subviews[0];
}
}
-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale {
}
を私はYES、それを設定またはNOズームが必要とされているか否かによってURLに基づいBOOL shouldPageNotZoom &を使用しています。ズームが必要なページでは、ズームが必要でないページのログ領域&にelseブロック(NSLog(@"viewForZoomingInScrollView NO");
)のログが記録されているのがわかります。ブロック(NSLog(@"viewForZoomingInScrollView YES");
)のログを見ることができます。どちらが機能しているか。唯一の問題はコンテンツページが最初のズームジェスチャをズームしてWKWebViewまたはコンテナビューをズームしていないことです(私は推測します)。後続のズームジェスチャをズームします。
は、いくつかの観察後、私はscrollviewのインデックス0にそのサブビューが最初&回目以降のズームされている(ただし、コンテンツページは、その後の回ではない初めてズーム)viewForZoomingInScrollView
に返される、見つかりました。その場合は、&です。私は
2017-11-28 17:21:36.610753+0530 MyApp[4614:241659] tag 10 //Getting this 1st time of zooming
2017-11-28 17:21:59.369461+0530 MyApp[4614:241659] tag 10 //Getting this at subsequent zooms
:以下ログを与える
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
if (shouldPageNotZoom) {
NSLog(@"viewForZoomingInScrollView YES");
return nil;
} else {
NSLog(@"viewForZoomingInScrollView NO");
xWalkView.scrollView.tag = 20;
xWalkView.tag = 15;
xWalkView.scrollView.subviews[0].tag = 10;
_containerView.tag = 5;
return xWalkView.scrollView.subviews[0];
}
}
-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale {
NSLog(@"tag %li", (long) view.tag);
}
:私は以下のようにログ領域におけるscrollViewDidEndZooming
方法におけるタグ値をロギングすることでタグ値を見て、各ビュー&にタグ値を割り当てることによって、これをしませんでした私は何が欠けているのか分からない。
説明が必要な場合は、ご意見ください。