2017-02-17 4 views
1

私はUIScrollViewを持ち、スクロールビューフレームはUIViewフレームと等しくありません。したがって、スクロールビューの枠外にスワイプしている間はスクロール表示の内容はスワイプされません。しかし、私は、スクロールビューはフルスクリーンをカバーしていませんが、スクロールビューの全画面を応答したいと思います。 私はスクロールビューフレームをビューフレームと同じにすることによって行うことができますが、私はそれをしたくありません。これまでに見つけた解決策を試しました。しかし、何も私が望むように働いていません。 ジェスチャ認識機能を使用してこれを行う必要があります。続きUIViewでスワイプジェスチャーを認識し、ジェスチャー認識機能を使用してscrollViewをスクロールします。

は私のコードです:

override func viewDidLoad() { 
     super.viewDidLoad() 
     scrollView.delegate = self 

     let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture)) 
     swipeRight.direction = UISwipeGestureRecognizerDirection.right 
     self.view.addGestureRecognizer(swipeRight) 


     let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture)) 
     swipeLeft.direction = UISwipeGestureRecognizerDirection.left 
     self.view.addGestureRecognizer(swipeLeft) 

} 

func respondToSwipeGesture(gesture: UIGestureRecognizer) { 
     if let swipeGesture = gesture as? UISwipeGestureRecognizer { 
      switch swipeGesture.direction { 
      case UISwipeGestureRecognizerDirection.right: 

       scrollView.panGestureRecognizer.isEnabled = true 

      case UISwipeGestureRecognizerDirection.left: 

       scrollView.panGestureRecognizer.isEnabled = true 


      default: 
       break 
      } 
     } 
    } 

これは私のビューコントローラであると青の背景には、スクロールビューです。スワイプジェスチャーは、その青い領域でのみ機能します。しかし、私はそれがコーナーでさえスクリーンを通して働くことを望みます。 ジェスチャー認識装置を使用してどのように達成できますか?

+1

http://stackoverflow.com/a/43328905/5173807 – 9it3e1

答えて

3

EDIT

まで行くように、ビューのフレームに、あなたのスクロールビューを作成しますが、その後のコンテンツのインセット/オフセットを設定します解決方法:をviewDidAppearまたはviewDidLoadに追加するだけです。これは、本質的に何

は取るですscrollViewUIPanGestureRecognizer、指がドラッグ認識しscrollViewスクロールジェスチャー認識のコンテンツを、そしてそれは、ドラッグ指を認識し、scrollView年代をスクロールすることができるように、ベースビューに与えますコンテンツも。

したがって、すべての数学とscrollRectToVisibleが以下のように必要なわけではありません。うーん、私はUIScrollViewsのしくみについてもっと学ぶのは便利で楽しいと思う!

OLD

プログラムでUIScrollViewののscrollRectToVisibleを使用し、 "スクロール" UIScrollViewのを行います。

詳細とコードの構文については、Programmatically scroll a UIScrollViewを参照してください。

基本的に、任意の時点で、UIScrollViewのコンテンツサブビューは、フレームからある程度オフセットされています。

それはUIScrollViewの(ESPコンテンツサブビュー。)に部品を理解するのに役立ちます、この絵のように(紫UIImageViewを無視して自由に感じる):最初の画像、UIScrollViewのサブビューのコンテンツ(中enter image description here

赤いアウトライン)は、UIScrollViewのフレーム(可視の画面と同じサイズであると仮定)からオフセットされていません。両方とも(0、0)に同じ左上隅を持ちます。

UIScrollViewのコンテンツサブビューは現在「オフセット」されています。コンテンツサブビューの左上隅は(0、-200)のようになります。ここでも(0,0)はトップですUIScrollViewのフレームの左隅。

また、UIScrollViewのコンテンツサブビューオフセットを変更して、scrollRectToVisibleとパラメータanimated: trueを使用して「スクロール」をシミュレートできます。 (ユーザーが右から左へスワイプした後に)コンテンツのスクロールは、例えば左、あなたがのオフセットx座標UIScrollViewのの現在のコンテンツを取ると思います持っている(scrollView.contentOffset.x)と減算の幅:

ヒント UIScrollView(scrollView.frame.size.width)をそれに追加します。したがって、UIScrollViewの現在のコンテンツオフセット(左上隅)が(0、0)の場合、コンテンツオフセット(左上隅)は(0幅、0)から移動し、コンテンツは左に移動します。

+1

新しい方法の1つの問題は、パンのジェスチャーが実際のスクロールビューではなく外側のビューでのみ検出されることです。そこで、私はhttps://stackoverflow.com/questions/41131986/scrollview-gesture-recognizer-swipe-vertically/43328905#43328905に記載されている方法を使用しました。 – Abu

0

それだけで私は実際にちょうどはるかに簡単について学ん青枠

+0

を参照してください。青色の背景がそこまでしか表示されないようにするには、その背景色のUIViewをサブビューとしてスクロールビューに追加しますが、古いフレーム(ギャップあり) – Florensvb

+0

コードplzを書くことができますか? – mumu

関連する問題