0

(スクロールモードの場合)に埋め込まれた全角でUIWebViewのナビゲーション用にGoogleマップを埋め込みます。ページコントローラーは、UIWebView内のすべてのページのページターンジェスチャーに応答します。UIWebViewにGoogleマップが読み込まれていないと応答しません。明らかに、これは、Webページがパン/スワイプジェスチャーをインターセプトしたためです。ジェスチャーがエッジスワイプの場合を除き、ウェブページ内のすべてのパンとインタラクションを許可したいと思います。エッジスワイピングが不可能な場合は、エッジ付近のパンジェスチャも許容されます。UIWebViewのScreenEdgePanGestureをPageViewControllerの親ページに渡します

私はScreenEdgePanGestureRecognizerとsegueをページに追加できますが、これはUIPageViewの外に私を置きます。私は、特定のページ(例えばpageViewController.setViewControllers)に分割せずに、UIPageViewControllerが次の/前のページに移行できるように、ソリューションを拡張可能にしたいと思います。

ここでは、現在どのように私がジェスチャーを傍受しているかを示します。

var leftScreenPanGestureRecognizer = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(self.handleMapSwipe(_:))) 
    leftScreenPanGestureRecognizer.edges = .Left 
    leftScreenPanGestureRecognizer.cancelsTouchesInView = true 
    self.view.addGestureRecognizer(leftScreenPanGestureRecognizer) 
    self.webView.addGestureRecognizer(leftScreenPanGestureRecognizer) 


    if let location = locationManager.location?.coordinate { 
     let lat = location.latitude 
     let long = location.longitude 
     webView.loadRequest(NSURLRequest(URL: NSURL(string: "https://www.google.com/maps/place/\(lat),\(long)/")!)) 
    } else { 
     webView.loadRequest(NSURLRequest(URL: NSURL(string: "https://www.google.com/maps/")!)) 
    } 

質問です: UIPageViewControllerのみ関連するジェスチャーを傍受できるようにする方法。または、ジェスチャをインターセプトして、それを展開可能な方法でUIPageViewControllerに渡します。

答えて

0

私は約self.parentViewController

@IBAction func handleMapBackwardSwipe(recognizer: UIScreenEdgePanGestureRecognizer) { 
    if (recognizer.state == .Began) { 
     webView.scrollView.scrollEnabled = true 
    } else if(recognizer.state == .Ended || recognizer.state == .Cancelled){ 
     webView.scrollView.scrollEnabled = false 
    } 

    // PageViewController is the controlling class for the UIPageViewController on the storyboard. 
    let pvc = (self.parentViewController as! PageViewController) 
    let newView = pvc.pageViewController(pvc, viewControllerBeforeViewController: self) 
    if let newView = newView { 
     pvc.setViewControllers([newView], direction: .Reverse, animated: true, completion: nil) 
    } 
} 

@IBAction func handleMapForwardSwipe(recognizer: UIScreenEdgePanGestureRecognizer) { 
    if (recognizer.state == .Began) { 
     webView.scrollView.scrollEnabled = true 
    } else if(recognizer.state == .Ended || recognizer.state == .Cancelled){ 
     webView.scrollView.scrollEnabled = false 
    } 

    let pvc = (self.parentViewController as! PageViewController) 
    let newView = pvc.pageViewController(pvc, viewControllerAfterViewController: self) 
    if let newView = newView { 
     pvc.setViewControllers([newView], direction: .Forward, animated: true, completion: nil) 
    } 
} 
を学習した後、拡張可能な方法でこれを処理する方法を見つけた
関連する問題