我開始使用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個手指時,應用程序不應該得到任何「向上」回調。但是當我釋放所有這些並再次觸摸時,按鈕會壓低,所以它知道我釋放了所有這些手指!怎麼樣??
謝謝!那很完美。只是爲了澄清,我的問題從來不是我想要處理超過5次觸摸。這是如果用戶碰巧觸摸屏幕5次以上(我無法控制......),它會打破我的系統沒有touchesCancelled事件。 我只是在想,我自己的觸摸管理器需要讓用戶知道觸摸和取消之間的區別,所以這是有道理的。當您使用示例代碼作爲基準時,會發生這種情況... – matt