2017-12-20 11 views
-1

ユーザーがテーブルビューの最上部でスワイプしたときに現在のビューコントローラを終了しようとしています。テーブルビューは画面全体を占めているので、私の身振りとtableViewのジェスチャーは競合します。パンジェスチャ認識機能は、スワイプダウンするときにのみスクロールし、テーブルビューの最上部で反応します。

ユーザーがテーブルビュー(tableView.contentOffset.y == 0.0)をスクロールせず、スワイプの方向が下向きの場合にのみUIPanGestureRecognizerが応答すると考えました。しかし、私はこれを実装することに成功していません。私は同様の質問で周りを見回しているが、答えのどれも私のために働いていない

var tableGesture: UIPanGestureRecognizer? 
var oPosition: CGPoint? 
var currentPosition: CGPoint? 
@IBOutlet weak var table: UITableView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    table.delegate = self 
    table.dataSource = self 

    tableGesture = UIPanGestureRecognizer(target: self, action: #selector(tableGesture(_:))) 
    table.addGestureRecognizer(tableGesture!) 
} 

override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { 
    let translation = tableGesture?.translation(in: table) 
    return translation!.y > 0 && table.contentOffset.y == 0.0 
} 

は、これは私のコードです。

+0

なぜdownvoteですか?私は何かを逃した場合の説明を感謝します。 –

答えて

0

これを行う最も簡単な方法は、tableViewの上に別のクリアビューを追加し、このビューにパンジェスチャ認識機能を追加することです。それはかなり短いかもしれません(私は20ポイントを試して、それはうまく動作します)。 scrollViewDidScrollをオーバーライドし、contentOffset.y < = 0の場合にのみ、isHiddenをtrueに設定できます。非表示のビューでは、tableViewの最上位にあるときのみ、tableviewの上位20ポイントから始まるパンを検出するようになりました。

+0

本当に簡単な解決策でした。 –

0

これは、2つのジェスチャーが有効で同じイベントを検出するスワイプTopまたはBottomスワイプを処理するために非常に重要と思われます。私は
は、テーブルビューのスクロール位置を検出提案することができ、テーブルの行インデックスは、テーブルのスクロールのためにゼロまたはコンテンツをオフセットされている場合

簡単な論理的な解決策はゼロです:イベントを下にスワイプし、近くに/あなたのビューコントローラを閉じ識別します。ここで

は、あなたが使用することができ、液の似たようなものです: - Scrolling Delegate in TableView

+0

'tableView'自身のジェスチャーハンドラを使うことをお勧めしますか? –

0

私はあなたが欲しいものを理解している場合、これは何が必要です。

テーブルビューがスクロールビューであることを考慮すると、この関数はユーザーがテーブルをスクロールするたびに実行され、table.contentOffset.yを呼び出してスクロール座標を取得できます。

var lastContentOffset: CGFloat = 0 

func scrollViewDidScroll(_ scrollView: UIScrollView) { 

    print("the user scrolled down",table.contentOffset.y) 


    if (self.lastContentOffset > tableView.contentOffset.y) { 
     //scrolling up 

    } 
    else if (self.lastContentOffset < tableView.contentOffset.y) { 
     // scrolling down 

     // dismiss your view here. 

    } 


    if table.contentOffset.y < 5 { 

     // the following code will be called when the user scrolls back up 

     // show the view again if thats what you need 


    } 


    self.lastContentOffset = scrollView.contentOffset.y 
} 
+0

あなたの答えをありがとう、私はこの方法を試しましたが、結果は残念なことにややバギーでした。 –

関連する問題