你不能改變UIGestureRecognizer
的state
財產的執行。如果您可以公開獲取並設置state
,那麼您可以創建一個不同的計算屬性myState
,它將轉發獲取並設置爲state
。不幸的是,你不能。但是,您可以使用KVO(Key Value Observing)解決此問題。
首先,我們創建一個對象,該對象可以響應我們手勢的KVO通知,並實現observeValueForKeyPath
,該對象在調用state
屬性時調用。
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)
}
}
}
二,註冊StateObserver
實例時tap.state
改爲得到通知。
let stateObserver = StateObserver()
let tap = UITapGestureRecognizer()
tap.addObserver(stateObserver, forKeyPath: "state", options: [.New, .Old], context: nil)
第三,不要忘記註銷StateObserver
一旦你完成。
tap.removeObserver(stateObserver, forKeyPath: "state'")
您何時會刪除觀察者?例如,如果它在UITapGesture上,你會不會總希望在那裏多次點擊? –
你是正確的,當你不再想接收通知時,你可以刪除觀察者。一個例子是當視圖出現在屏幕上時添加觀察者,當視圖被移除時刪除觀察者。 – Kevin