2016-03-30 14 views

答えて

1

あなたはUIGestureRecognizerstateプロパティの実装を変更することはできません。公開されてstateを取得して設定できる場合は、myStateという別の計算されたプロパティを作成し、それを転送してstateに設定することができます。残念ながら、あなたはできません。ただし、KVO(Key Value Observing)を使用して回避することができます。

まず、ジェスチャーのKVO通知に応答できるオブジェクトを作成し、stateプロパティが呼び出されたときに呼び出されるobserveValueForKeyPathを実装します。

class StateObserver : NSObject { 
    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
     if let gesture = object as? UIGestureRecognizer { 
      gesture.stateChanged(gesture.state) 
     } 
    } 
} 

第二に、tap.stateが変更されたときに通知を受け取るためにStateObserverインスタンスを登録します。

let stateObserver = StateObserver() 
let tap = UITapGestureRecognizer() 
tap.addObserver(stateObserver, forKeyPath: "state", options: [.New, .Old], context: nil) 

第三に、設定が完了したら、StateObserverの登録を解除することを忘れないでください。

tap.removeObserver(stateObserver, forKeyPath: "state'") 
+0

いつオブザーバーを削除しますか?たとえば、UITapGestureの場合は、複数のタップを入れて、いつもそこにあることを望んでいないでしょうか? –

+0

通知を受け取る必要がなくなったときにオブザーバーを削除するという点は正しいです。たとえば、ビューが画面に表示されたときにオブザーバを追加し、ビューが削除されたときにオブザーバを削除するとします。 – Kevin

関連する問題