2011-06-09 81 views
0

我試圖在多點觸控中找到兩個觸控的座標。這段代碼在'UITouch * touch2 = ...'這一行上拋出一個SIGABRT。任何人都可以告訴我我哪裏出錯了?多點觸控座標問題iPhone

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSArray *touchArray = [touches allObjects]; 
    UITouch *touch1 = [touchArray objectAtIndex:0]; 
    UITouch *touch2 = [touchArray objectAtIndex:1]; 
    CGPoint firstTouch = [touch1 locationInView:self.view]; 
    CGPoint secondTouch = [touch2 locationInView:self.view]; 
} 

回答

1

最有可能在陣列中只有一個觸摸。在嘗試檢索該索引處的對象之前,應該檢查該數組是否包含索引:

NSUInteger count = [array count]; 
id obj = (count > 1)? [array objectAtIndex:1] : nil; 
id obj2 = (count > 2)? [array objectAtIndex:2] : nil; 
+0

關於NSArray總體上的這一點是正確的,但是@ Conor的問題並非如此。看到我的答案。 – ZhangChn 2011-06-09 21:41:05

+0

不,我不想檢查是否有雙擊。我需要找到兩個手指在同一時間點擊屏幕的座標 – 2011-06-09 21:51:37

+0

@Conor Taylor:他們同時以人類命名。從機器的角度來說,他們相隔很長一段時間。您需要處理整套觸摸方法,並在每個步驟中採取相應的行動;無法保證觸摸開始時實際上會有多個觸摸報告。 – 2011-06-09 22:06:10

1

如果你想獲得一個雙擊事件,您需要檢查每個tapCount值UITouch對象,而不是touches是否有兩個對象。

for (UITouch *touch in touches) { 
    if (touch.tapCount==1) { 
     // do something 
    } else if (touch.tapCount==2) { 
     // do something else 
    } 
} 
+0

不,我不想檢查是否存在雙擊。我需要找到兩個手指同時在屏幕上的座標 – 2011-06-09 21:51:26

+0

您需要逐個檢查觸摸。在ivars中保存狀態。不能保證兩個觸碰都會在一起。 – ZhangChn 2011-06-09 22:04:58

+0

好吧我怎麼才能找到合作呢? – 2011-06-10 05:29:34