2017-11-28 6 views
1

WKWebViewのサブクラスであるXWalkViewを使用しています。コンテクストビューにサブプログラムとしてプログラムで追加されています。私はWKWebViewのコンテンツページをズームしようとしていますが、最初にズームしません。 WKWebViewはコンテンツのページをズームしたりズームをダブルタップするとWKWebView自体やコンテナビュー(私の推測)&をズームした後、ズームジェスチャをやり直すとコンテンツページがズームされます(これは期待される動作です)。WKWebViewズームが正しく機能しない

質問は、ズームジェスチャーが実行されるたびにWKWebViewのコンテンツページをズームする方法です。

私は以下のように私のViewController.hUIScrollViewDelegateプロトコルに準拠しています:

@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方法におけるタグ値をロギングすることでタグ値を見て、各ビュー&にタグ値を割り当てることによって、これをしませんでした私は何が欠けているのか分からない。

説明が必要な場合は、ご意見ください。

答えて

0

解決方法が見つかりました!以下に示すように、最後のサブビュー最初に戻すviewForZoomingInScrollView方法における後続のズームにscrollviewの&最初のサブビューは、この問題を解決:でNOに

-(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; 

     if (isFirstTimeZooming) { 
      return xWalkView.scrollView.subviews[xWalkView.scrollView.subviews.count - 1]; 
     } else { 
      return xWalkView.scrollView.subviews[0]; 
     } 
    } 
} 

-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale { 
    NSLog(@"tag %li", (long) view.tag); 
    isFirstTimeZooming = NO; 
} 

isFirstTimeZoomingdidStartProvisionalNavigation方法&セット内のページの負荷にYESに設定されていますscrollViewDidEndZoomingメソッドを使用して、スクロールビューの最初のサブビューを後続のズームで渡すことができます。

viewForZoomingInScrollViewに最後のサブビューのみを渡すと、ズーミングの問題が逆転した、つまり最初は正しくズームされていたが、その後のズームではズームされなかったためです。isFirstTimeZooming

関連する問題