2017-01-19 12 views
1

私のプロジェクトには、イメージスライダが内部にあるカスタムuitableviewCellがあります。基本的には画像のページが表示されたスクロールビューです。UIGestureRecognizerのダブルタップ

いくつかの操作を実行するには、このImageSliderをタップしてダブルタップする必要があります。シングルタップは正常に動作していますが、ダブルタップセレクタはトリガされません。

override func awakeFromNib() { 
    super.awakeFromNib() 

    let singleTap = UITapGestureRecognizer(target: self, action: #selector(singleTap(_:))) 
    singleTap.numberOfTapsRequired = 1 
    singleTap.cancelsTouchesInView = false 
    slideShowView.addGestureRecognizer(singleTap) 


    //Double tap recognizer 
    let doubleTap = UITapGestureRecognizer(target: self, action: #selector(doubleTap(_:))) 
    doubleTap.cancelsTouchesInView = false 
    doubleTap.numberOfTapsRequired = 2 

    slideShowView.addGestureRecognizer(doubleTap) 

    singleTap.require(toFail: doubleTap) 

    print("slideshow recognizers",slideShowView.gestureRecognizers!) }   


func doubleTap(_ sender : UITapGestureRecognizer) { 

    print("doubletap")   
} 

func singleTap(_ sender : UITapGestureRecognizer) { 

    print("singleTap") 
} 

よろしく

EDIT:あなたは、ここに私のログを見ることができる私は変更私のオリジナルのポストすぎ

slideshow recognizers [<UITapGestureRecognizer: 0x17ec1670; state = Possible; view = <ImageSlideshow.ImageSlideshow 0x17ec0e30>; target= <(action=singleTap:, target=<Descubra.FeedDefaultCell 0x183cf800>)>; must-fail = { 
    <UITapGestureRecognizer: 0x17e763b0; state = Possible; view = <ImageSlideshow.ImageSlideshow 0x17ec0e30>; target= <(action=doubleTap:, target=<Descubra.FeedDefaultCell 0x183cf800>)>; numberOfTapsRequired = 2> 
}>, <UITapGestureRecognizer: 0x17e763b0; state = Possible; view = <ImageSlideshow.ImageSlideshow 0x17ec0e30>; target= <(action=doubleTap:, target=<Descubra.FeedDefaultCell 0x183cf800>)>; numberOfTapsRequired = 2; must-fail-for = { 
    <UITapGestureRecognizer: 0x17ec1670; state = Possible; view = <ImageSlideshow.ImageSlideshow 0x17ec0e30>; target= <(action=singleTap:, target=<Descubra.FeedDefaultCell 0x183cf800>)>> 
}>] 

singleTap 
+0

requireToFailは、同じビューで2つのジェスチャーを使用する場合は必須です。ビューのhase userinteractionenabled = YESで、ダブルタップの発生を防ぐtableview DidSelectのメソッドがないことも確認してください。 –

+0

@ snakeこれはuserInteractionEnabled = trueです。そうしないと、別のビューで各画像を開いているため、スライドショーで画像をスライドできず、シングルレットが機能しています。 – pneves

+0

申し訳ありません私はUIScrollViewを持っているあなたの部分を逃した。 UIScrollViewをテキストに書き込むと、今後の質問に人々が詳細を見逃すことはずっと簡単です。 ScrollViewには独自のDouble Tappingのメソッドがあり、カスタムのメソッドで失敗する理由があります。スクロールビューでdelayaysContentTouches = NOを設定して、問題が解決するかどうかお知らせください。そうでなければ、あなたは問題を知っているので、Googleの解決策をもっと簡単にすることができます。 GL –

答えて

5

一緒にシングルとダブルタップジェスチャーを機能させるために、システム、見たとき単一の人は、それが本当に単一のものか二重の最初のものかを知る必要があります。これは、将来の知識(非常に貴重な機能になるでしょう)か、次のものを待って見なければなりません。待つように指示するには...

singleTap.requireGestureRecognizerToFail(doubleTap) 
+0

返信のためのthxが、私のコードで見ることができるように、私はすでにそれを試しました、そのコメント//singleTap.require(toFail:doubleTap)(swift 3バージョン)。それは仕事をしなかった – pneves

+0

@pneves - 申し訳ありません。コメントを逃した。うーん。 cancelsTouchesInView = falseを両方とも取り除くことができますか、それともやってみましたか? – danh

+0

はい私もそれを行いました:\ – pneves

関連する問題