2012-04-26 46 views
1

我試圖發光觸摸視圖,並在觸摸結束時取消它。在做這件事時,我注意到當我從視圖中擡起手指時,- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event方法不被調用,而是在視圖上調用- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event方法。這是一種正常的行爲?我認爲touchesCancelled是因爲系統問題(如低內存警告)而被取消時被調用的。我通過使用touchesCancelled做了我的工作,但我想知道爲什麼它沒有正確地呼叫touchesEnded。這是一個錯誤嗎?touchescancelled被調用,而不是touchesended

+1

這不是正常行爲。我懷疑這是一個錯誤。答案完全取決於你的項目。沒有人可以在沒有看到所有相關代碼部分的情況下開始猜測。 – borrrden 2012-04-26 03:09:40

回答

2

當您觸摸該視圖並擡起手指時,不應拖動手指。如果你這樣做,那麼touchesCancelled:方法將被調用。所以我認爲你的觀點太小而無法觸及。如果是的話,然後做一個大視圖,然後再試一次。它會爲你工作。

認爲這是一個comment ..

0

看起來touchesCancelled被調用,而不是touchesEnded如果觸摸沒有在第一秒足夠遠動左右就開始了。如果我做出一個小而快的動作,觸動取消動作會發射,因爲總動作不夠大;如果我慢慢做出一個小動作,在動作完成之前觸動取消動作將會觸發,因爲iOS放棄等待看看我是否會進一步移動。顯然,iOS正在對移動是多麼「重要」做出判斷,並將小動作視爲取消觸摸。

如果有幫助,您可以簡單地從touchesCancelled調用touchesEnded。但是在移動速度很快的情況下,直到超時時間纔會調用它,所以在移動實際結束和觸發取消時間之間可能存在延遲。順便說一句,我也注意到,如果你做一個小而快的動作,然後擡起你的手指,然後開始另一個動作,在觸發取消之前被觸發,這不被認爲是一個新的動作,並touchesBegan不會開火。這使我的應用程序中的手寫功能變得複雜,因爲手寫都是關於小而快的移動。

相關問題