あなたはUIGestureRecognizer
のstate
プロパティの実装を変更することはできません。公開されて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'")
いつオブザーバーを削除しますか?たとえば、UITapGestureの場合は、複数のタップを入れて、いつもそこにあることを望んでいないでしょうか? –
通知を受け取る必要がなくなったときにオブザーバーを削除するという点は正しいです。たとえば、ビューが画面に表示されたときにオブザーバを追加し、ビューが削除されたときにオブザーバを削除するとします。 – Kevin