2016-10-21 1 views
0

メインUIにプログラムでビューを作成できるボタンがあります。それは一番下にあります。私はPanGestureRecognizerを使って動き回ることができる緑色の円として出てきます。ダブルタップ感知器とスウィフトフローを使用してパンジェスド認識器をオフにする

私の目標は、TapGestureRecognizerを使用してPanGestureRecognizerをオフにすることです(私はダブルタップにしたいと思います)。

これはこれまでのコードです。ビューをタップすると実際に色が変わりますが、PanGestureRecognizerを参照して無効にする方法はわかりません。

class MakeACircle: UIView { 
var circleCenter = CGPoint() 
    let tap = UITapGestureRecognizer() 
    let panGesture = UIPanGestureRecognizer() 
    var checkSomething = 1 



    init() { 

     super.init(frame: CGRect(x: 0.0, y: 0.0, width: 100, height: 100)) 
     self.layer.cornerRadius = 50.0 
     self.backgroundColor = UIColor.green 
     self.isUserInteractionEnabled = true 
     UITapGestureRecognizer().numberOfTapsRequired = 2 
     } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    func dragCircle(gesture: UIPanGestureRecognizer) { 
     let target = gesture.view! 

     switch gesture.state { 
     case .began, .ended: 
      circleCenter = target.center 
     case .changed: 
      let translation = gesture.translation(in: self.superview) 
      target.center = CGPoint(x: circleCenter.x + translation.x, y: circleCenter.y + translation.y) 
     default: break 
     } 
    } 

    func freeze(gesture: UITapGestureRecognizer) { 

      switch checkSomething { 
      case 1: 
       self.panGesture.isEnabled = false 
       self.backgroundColor = UIColor.blue 
       checkSomething += 1 
       print(checkSomething) 


      case 2: 
       self.panGesture.isEnabled = true 
       self.backgroundColor = UIColor.red 
       checkSomething -= 1 
       print(checkSomething) 

      default: 
       break 
      } 

     } 
} 

私は..あなたが見ることができるように私はそれを色をオンにするそこにスイッチがあり、タップが働くこのIBButton

@IBAction func makeACircle(_ sender: UIButton) { 
    let something = MakeACircle() 
    self.view.addSubview(something) 

    something.addGestureRecognizer(UIPanGestureRecognizer(target: something, action: #selector(something.dragCircle(gesture:)))) 
    something.addGestureRecognizer(UITapGestureRecognizer(target: something, action: #selector(something.freeze(gesture:)))) 

    something.center = self.view.center 

} 

と、プログラムでビューを作成しています、それは番号を印刷し、色を回します..それはちょうど1つのタップで起こり、パンはそのままです。

洞察力は大変ありがとうございます!これは私の最初の実行です、私はドアのところにいるのは分かっていますが、私はそれを理解できません。

+0

「cancelsTouchesInView」を理解しているかどうかわかりません。このプロパティがtrue(デフォルト)で、受信者がジェスチャを認識した場合、そのジェスチャのタッチはビューに配信されず、以前に渡されたタッチはtouchesCancelled(_:with :)メッセージがビューに送信されました。ジェスチャ認識プログラムがそのジェスチャを認識しない場合、またはこのプロパティの値が偽である場合、マルチタッチシーケンスですべてのタッチを受け取ります。 – mat

+0

説明を少し変更しました。タッチジェスチャーでパンジェスチャーを無効にして有効にしたいので、私はタッチをキャンセルしたくありません。ですから、ビューをダブルタップすると、その位置にロックされます。もう一度タップすると、もう一度移動できます。もう少し意味がありますか? インスタンスの特定のPanGestureRecognizerを参照してクラス内のコードを無効にする方法がわかりません。間違っていると思います。 { スイッチタップ{ ケース1!:もしタップ=真{ self.panGesture.isEnabled = falseを self.backgroundColor =:あなたの助け –

+0

ただ、ラフアイデア... FUNC凍結(UITapGestureRecognizerジェスチャー)のための 感謝UIColor.blue }ケース2:場合は、タップ==真{ self.panGesture.isEnabled =真 self.backgroundColor = UIColor.red }デフォルト: ブレーク } } //これを試してみてください.... – Joe

答えて

2

MakeACircle()オブジェクトを追加するときに、self.panGestureへの参照が格納されていないようです。無効にしようとすると、何もしません。 self.panGestureはどこに設定されていますか?これに代えて

something.addGestureRecognizer(UIPanGestureRecognizer(target: something, action: #selector(something.dragCircle(gesture:)))) 

これを試してみてください。

something.panGesture = UIPanGestureRecognizer(target: something, action: #selector(something.dragCircle(gesture:))) 
something.addGestureRecognizer(something.panGesture) 

UPDATEあなたのタップジェスチャー認識のための

、あなたはまた、それへの参照を格納していることを確認してくださいあなたがパンジェスチャーと同じように。

UITapGestureRecognizer().numberOfTapsRequired = 2 

が、それはあなたが

something.addGestureRecognizer(UITapGestureRecognizer(...)) 

だからあなたが行うべきであると述べたとき、あなたが追加したのと同じタップジェスチャーではないので、それは何もしません。あなたのinit()内

は、あなたが持っています他のジェスチャーで行ったようなもの

something.tap = UITapGestureRecognizer(target: something, action: #selector(whatever)) 
something.tap.numberOfTapsRequired = 2 
something.addGestureRecognizer(something.tap) 
+0

私はあなたを愛しています。これはうまくいった!それはまた、クラスの中でこれらのことをどうやって動作させるかについてもう少し洞察を与えてくれます。とても感謝しています! –

+0

@TomMohr私はそれがあなたのためにうまくいってうれしい!質問は「どこに設定されていますか? 「どこに定義されていますか?」このような混乱しているバグのために正しい方向にあなたを導くでしょう:) – LulzCow

+0

ok - 私はあなたにフォローアップの質問をすることができますか?私はそれを取得しようとしているので、タップレコグナイザが2回タップした後に開始します... 1後にそれをしています。私はそれを読むためにいたるところで試しましたが、何も動作しないようです。私は再びそれが私の指の先端にあるように感じる... :(もしあなたがもう一度手伝ってもらえると感謝します。 –

関連する問題