2016-07-25 14 views
1

私のUITapGestureRecognizerでユーザーからのタッチを登録するのに少し問題があります。 showMenu()ユーザーがblackView上でタップしたときは(却下するよう機能がユーザーに部分的に透明blackViewを表示するようになっている、と私はジェスチャー認識を実装しました)です呼び出され、ビューがフェードします。スウィフト:ジェスチャー認識がタップを登録していません

私のXCodeコンソールでは、コードに指定されている "却下"という印刷メッセージは表示されません。

ありがとうございます!

func showMenu(){ 
    print("show") 

    if let window = UIApplication.sharedApplication().keyWindow{ 

     blackView.backgroundColor = UIColor(white: 0, alpha: 0.5) 

     blackView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(dismiss))) 

     window.addSubview(blackView) 
     blackView.frame = window.frame 
     blackView.alpha = 0 

     //Added this line 
     blackView.userInteractionEnabled = true 

     UIView.animateWithDuration(0.5){ 
      self.blackView.alpha = 1 
     } 
    } 
} 

func dismiss(){ 
    print("dismiss") 

    UIView.animateWithDuration(0.5){ 
     self.blackView.alpha = 0 
    } 
} 

編集:私はすべてのビューがビュー階層のデバッグツールを使用してタップを盗んでトップにあったかどうかを確認するためにチェックしましたが、blackView上記のものがあるようには思えない、私はまたしました明示的にを設定して、ユーザーの対話を許可するようにを設定してください。

EDIT: View Hierarchy Debugインターフェイスのスクリーンショットです。

+1

numberOfTapsRequiredを1に設定しようとしましたか? @Scriptable、 – Scriptable

+0

残念ながら、私は同じ結果を受けています。 – BlackDeveraux

+0

ええと、大丈夫、コードは私には大丈夫です、あなたはフロントにサブビューを持って来ることができますか? 'self.view.bringSubviewToFront(blackView)'サブビューを追加したら、それが役立つかどうか確認してください。私はちょっと試してみることができません、ちょうどアイデアを思い付いて – Scriptable

答えて

3

あなたはそれがタッチイベントを取得して停止したゼロにアルファビューを変更した場合。

あなたが代わりにビューのアルファを変更するので、透明にビューの背景色を変更しようとすることができ、その方法は、あなたのビューが表示されません、あなたは

+0

透明度の遷移をアニメートすることはできますか? – BlackDeveraux

+0

代わりにself.blackView.alpha = 0あなたのUIView.animateWithDurationに入れてください。self.blackView.backgroundColor =

+0

いいえ。しかし、私のコードでは、* blackView *に触れるはずですが、アルファ値は技術的には1に設定されています。根本的な問題がアルファ値であるとは思わないが、他に何が間違っていたのだろうか? – BlackDeveraux

1

はあなたのコードにこれを追加イベントを取得します。 1回の接触があったかどうかを確認してから、あなたは解雇方法を呼び出すことができます。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 

    let touch = touches.first?.tapCount 
    if touch == 1 { 
     // Call Dismiss 
     dismiss() 
    } 
} 
関連する問題