在iPhone SDK中有touchesBegan,touchesEnded和touchesMoved函數,當觸摸事件出現時被調用。我的問題是,當我將手指放在屏幕上而沒有移動屏幕時,無法知道屏幕上是否有手指。有沒有辦法獲得當前的觸摸屏狀態?iPhone觸摸屏事件
任何touchesBegan,touchesEnded和touchesMoved函數我可以使用休閒代碼來了解每個觸摸的狀態,但在他們之外,我不能:|
NSSet *allTouches = [event allTouches];
for(GLuint index = 0; index < [allTouches count]; ++index)
{
UITouch *touch = [[allTouches allObjects] objectAtIndex:index];
if([touch phase] != UITouchPhaseCancelled)
{
CGPoint touchPoint = [touch locationInView:self];
//do something with touchPoint that has state [touch phase]
}
}
如果我跟蹤所有觸摸,將會出現另一個問題 1)最後一次觸摸後無法更新軌跡類狀態,並且它將保持在「觸摸釋放」的無效狀態 2)如果您解決1)通過更新計時器上的軌道類狀態,您可能會在使用它們之前刪除「釋放」事件並且沒有響應的應用程序。 – Felics 2010-06-01 16:53:33
@Felics,我想你誤解了我的建議。不要讓列表試圖模仿發佈事件 - 仍然可以正常處理觸摸發佈的事件(向某個對象發送消息等)。區別在於您維護一個觸摸位置列表,您可以隨時查詢。 – 2010-06-01 17:02:08
我希望能夠從我的對象中查詢它們的狀態,而不是將事件發送給對象(從一開始就是一個糟糕的體系結構,但現在無法更改,它在數百個源文件中使用:|)。如果我不更新定時器上的跟蹤類,我的問題是如果我不更新定時器的跟蹤類,因爲它將是無效的,或者如果我通過刪除所有發佈事件來更新定時器上的跟蹤類,則不處理所有事件...我知道這個問題將通過發送事件而不是查詢狀態來解決,但現在它不能像這樣解決。 – Felics 2010-06-01 17:12:10