2010-03-01 41 views
0

我開始使用MoveMe示例來使觸摸輸入正常工作。獲取iPhone觸摸輸入的可靠方法?

基本上,我定義這兩個回調函數來得到我的觸摸輸入:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 

    for (UITouch* touch in touches) 
    { 
     printf("touch down"); 
    } 
} 



- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    for (UITouch* touch in touches) 
    { 
     printf("touch up"); 
    } 
} 

這工作得很好,直到你有超過5個觸摸在屏幕上一次。那麼它會停止正常工作,如果屏幕上有超過5次觸摸,則不會收到「觸摸」消息。更糟糕的是,除非您將所有手指從屏幕上移開,否則您將無法可靠地獲取所有「修改」信息。

如果您用6根手指觸摸,然後釋放3,然後再觸摸另一個3仍然下來,您將得到「觸摸」,但如果釋放它,有時您會有時觸及「觸摸」別。

這幾乎無法跟蹤觸摸,並且通常會導致觸摸在傳遞到我的Touch Manager時永久向下。

有沒有更好的API用來獲得觸摸輸入?是否至少有一個函數可以調用來可靠地獲取屏幕是否被觸摸?這樣,當所有手指被釋放時,我可以重置我的管理員。

編輯:

沒錯,必須有我遺失的東西。因爲目前計算器做了一些我不能用這些回調做的事情。

它一次只接受一次觸摸,如果屏幕上有多次觸摸,它會「取消」所有觸摸,但必須跟蹤它們以知道觸摸屏上有「多於一個」觸摸屏幕。

如果我觸摸屏幕上的按鈕時,現在如果我添加另一個觸摸屏幕,按鈕釋放,冷卻,不允許多個觸摸。現在,如果我在屏幕上再添加4個手指,共計6個,屏幕應該會中斷,而當我釋放這6個手指時,應用程序不應該得到任何「向上」回調。但是當我釋放所有這些並再次觸摸時,按鈕會壓低,所以它知道我釋放了所有這些手指!怎麼樣??

回答

2

您的問題是,iPhone和iPod touch最多隻能同時支持五次觸摸(手指仍在觸摸屏幕)。這可能是硬件限制。
(如St3fan告訴你了。)

系統將取消所有觸摸,如果有超過5個在同一時間: touchesCancelled:withEvent: (這可能是什麼原因造成的,只有一些接觸調用touchesEnded的古怪行爲: withEvent :)

如果您想知道觸摸是否已結束,並且是因爲擡起而結束,請確保檢查UITouch的相位屬性。

+0

謝謝!那很完美。只是爲了澄清,我的問題從來不是我想要處理超過5次觸摸。這是如果用戶碰巧觸摸屏幕5次以上(我無法控制......),它會打破我的系統沒有touchesCancelled事件。 我只是在想,我自己的觸摸管理器需要讓用戶知道觸摸和取消之間的區別,所以這是有道理的。當您使用示例代碼作爲基準時,會發生這種情況... – matt

1

它停止工作,因爲5是iPhone和iPod當前支持的觸摸的最大數量。沒有辦法,我害怕。

+0

嗯,那麼人們如何解決按鈕被卡住和東西,因爲他們留下了觸摸屏幕上的觸摸?我的經理工作的方式是,它在經理獲得「開始」事件時爲經理增加一點觸覺,然後在遇到最終事件時將其刪除。 由於我沒有得到一些結束事件,這留下觸摸卡在屏幕上!? – matt

+0

這是否記錄在某處? – Tim

+0

我的意思是這太可悲了!必須至少有一些絕對的方法來判斷屏幕是否被觸摸!?這樣至少我可以清理我的觸摸管理器! – matt

相關問題