2012-02-09 52 views
0

我試圖建立與多點觸摸簡單的應用程序。我是iOS和objectivec/cocoa的新手。如果問題太愚蠢,請抱歉。iPhone/iPad的身份touchBegin,touchEnd

我想知道現在有多少手指活動,並且在用戶釋放一些手指或所有手指後釋放。我想要注意,我需要確切知道哪個手指被釋放。在第一眼看起來一切都很簡單...但在練習中我遇到了問題(

假設我在屏幕上同時放下三個手指,然後過了一段時間我放下了第四根手指。在這種情況下,在我的UIView.m文件中被稱爲兩個'touchesBegan'evens。 在第一個事件中,我計算了觸摸次數= 3',第二次觸摸次數爲4次(這是對的,因爲這是一個總數計數器)。因此,與此事件似乎一切都清楚了。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    NSSet *allTouches = [event allTouches]; 
    NSArray *allObjects=[allTouches allObjects]; 
    touchCount = [NSNumber numberWithInt:[allObjects count]]; // this is my main counter of current active touches. 
    NSLog(@"%d", touchCount.intValue); 
} 
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    //what I should do ???? 
} 

讓我們把屏幕劃分爲4個部分。想象一下,在iPad屏幕上的4個矩形。

然後爲這個矩形創建四個4布爾變量。我們將是所有4個矩形的商店狀態。默認情況下,所有變量都是 - false;

bool rectangle1 = false; 
bool rectangle2 = false; 
bool rectangle3 = false; 
bool rectangle4 = false; 

然後當手指開始向下時,在'touchesBegan'事件中,我們更改布爾變量。我們應該改變哪個變量通過x-y座標知道。假設我將手指放在矩形#2上,然後在矩形#4上放下另一隻手指。在這種情況下,變量如下:

bool rectangle1 = false; 
bool rectangle2 = true; 
bool rectangle3 = false; 
bool rectangle4 = true; 

之後,我從矩形#4釋放一個手指。那麼我怎麼會在'touchesEnded'事件中知道這是從一開始就被釋放的手指在矩形#4區域?

回答

1

而不是編寫自定義代碼,我強烈建議使用這個類代替:UIGestureRecognizer,有實現你想要的具體實現。

0

UIGestureRecognizers絕對是正確的方法。我會更進一步,讓每個矩形都有它自己的手勢識別器,或者至少是他們自己的touchesBegan和touchesEnded的實現。

如果矩形之間需要更多的協調,那麼它應該是視圖控制器的工作。矩形可以根據需要通知視圖控制器。

0

UITouch有兩種確定觸摸的當前位置和以前位置的方法:locationInView:previousLocationInView:。這些方法提供了唯一可靠的方法來建立通過touchesMoved:withEvent:調用的觸摸的「身份」。通過跟蹤locationInView:返回的值並在後續調用中將其與previousLocationInView:返回的值進行比較,您可以明確地確定您正在查看的「哪個」觸摸。

您沒有提供足夠的信息來確定您試圖做的事是否可以用UIGestureRecognizer完成,但如果可以,您可能會發現它們更容易處理。

+0

謝謝,我正在試着製作鋼琴卷。 – user1195202 2012-02-09 18:12:02