2013-02-05 86 views
1

我有兩個問題:的iOS UIGestureRecognizer

  1. 我可以實現手勢識別器,從UISwipeGestureRecognizer繼承並添加邏輯來處理UIEvent

  2. 我可以實施UIGestureRecognizer而不附加到UIView嗎?意思是,我將分析和管理UIEvent事件並調用正確的選擇器(touchesBegan,touchesMoved,touchesEnded,touchesCancelled)?

與此同時,當狀態爲UIGestureRecognizerStateEnded時,重置手勢識別器時出現問題。

回答

1

你問:

我可以實現手勢識別器,從UISwipeGestureRecognizer繼承並添加邏輯來處理UIEvent

是的。請參閱iOS事件處理指南中的Creating a Custom Gesture Recognizer另請參閱WWDC 2010 session 121 - Advanced Gesture Recognition。不過,這可能取決於您想要執行的操作,並且您應該通過配置標準滑動手勢的directionnumberOfTouches參數來查看是否可以完成所需的操作。我已經在像UIPanGestureRecognizer這樣的連續手勢上做了更多的子類化,但我沒有看到爲什麼你無法通過滑動來做到這一點。

我可以執行UIGestureRecognizer而不附加到UIView嗎?意思是,我將分析和管理UIEvent事件並調用正確的選擇器(touchesBegan,touchesMoved,touchesEnded,touchesCancelled)?

號很明顯,你可以創建一個,但它直到它添加到UIView和視圖接收觸摸只是將不會收到任何事件。

與此同時,當狀態爲UIGestureRecognizerStateEnded時,重置手勢識別器時出現問題。

您必須提交一個新問題,爲我們提供相關的代碼片段以幫助您解決問題。一般來說,當您的處理程序被呼叫UIGestureRecognizerStateEnded(和UIGestureRecognizerStateCancelledUIGestureRecognizerStateFailed)時,您會執行任何手勢後清理,並且當您收到下一個UIGestureRecognizerStateBegan時,您將爲下一個手勢初始化所有內容。

+0

感謝您的快速響應。關於第二個問題,正如我所提到的,我通過調整UIApplication sendEvent來管理UIEvents:然後將UIEvents轉發給未連接到任何UIView的識別器。而且看起來它是第一次運作,但是這個狀態並沒有停止,所以其他事件都失敗了。任何想法? – Amir

+0

@Amir沒有看到代碼就很難說。但我必須承認,我並不是一個狂熱的粉絲,因爲看起來意想不到的後果的規律往往會發揮作用。但是,也許用你的混合代碼來創建一個新問題,看看有沒有人有想法(並且支持自己的反火焰火焰;儘管如此)。我能問你想達到什麼嗎? – Rob

+0

@Amir我不得不懷疑,UIKit是否將手勢狀態恢復爲可能的處理在某種程度上取決於它被掛鉤到UIView。我真的不知道。這是我以前從未考慮過的內部實現問題。但是關於S.O.的偉大之處是通常有人花了很多時間思考同樣的問題,你可能會摔跤...... – Rob