2010-10-25 49 views
1

我正在實施touchesMoved,touchesBegan和touchesEnded在一些UIButtons上,以便我可以滑過我的手指,並讓他們調用適當的操作。幫助觸摸移動時,拖動手指

它似乎幾乎按照預期工作,但是,如果我在兩個按鈕的框架之外按兩個手指,然後將它們同時滑入按鈕的框架中,touchesMoved中的功能會被多次調用。相反,它應該只在按鈕的框架中調用一次按鈕的功能。

以下是我的代碼。

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 

{

for(UITouch *t in touches) { 

CGPoint location = [t locationInView:t.view]; 

if(CGRectContainsPoint(Button1.frame, location)) 
{ 
    if (!Button1.isHighlighted){ 
     if(!button1Highlighted) { 
      [self doAction1]; 
     } 
     [Button1 setHighlighted:YES]; 
     button1Highlighted = YES; 
    } 
} 
else { 
    [Button1 setHighlighted:NO]; 
    button1Highlighted = NO; 
} 
if(CGRectContainsPoint(Button2.frame, location)) 
{ 
    if (!Button2.isHighlighted){ 
     if(!button2Highlighted) { 
      [self doAction2]; 
     } 
     [Button2 setHighlighted:YES]; 
     button2Highlighted = YES; 
    } 
} 
else { 
    [Button2 setHighlighted:NO]; 
    button2Highlighted = NO; 
} 

} 

}

- (無效)的touchesBegan:(NSSet中*)觸摸withEvent:方法(的UIEvent *)事件 {

for(UITouch *t in touches) { 

    CGPoint location = [t locationInView:t.view]; 

    if(CGRectContainsPoint(Button1.frame, location)) 
    { 
     [Button1 setHighlighted:YES]; 
     button1Highlighted = YES; 
     [self doAction1]; 
    } 
    if(CGRectContainsPoint(Button2.frame, location)) 
    { 
     [Button2 setHighlighted:YES]; 
     button2Highlighted = YES; 
     [self doAction2]; 
    } 
} 

}

- (void)touche sEnded:(NSSet中*)觸及withEvent:方法(*的UIEvent)事件 {

for(UITouch *t in touches) { 

    CGPoint location = [t locationInView:t.view]; 

    if(CGRectContainsPoint(Button1.frame, location)) 
    { 
     [Button1 setHighlighted:NO]; 
     button1Highlighted = NO; 
    } 
    if(CGRectContainsPoint(Button2.frame, location)) 
    { 
     [Button2 setHighlighted:NO]; 
     Button2Highlighted = NO; 
      } 
} 

}

任何幫助是極大appeciated。謝謝!

回答

0

我最終通過將屏幕上的觸摸數存儲在名爲touchesCount的變量中來實現它。然後我在touchesBegan中增加它,並在touchesEnded中減少它。然後在調用doActionX之前觸摸移動,我檢查確保touchesCount < 2.

0

如果-touchesMoved:獲取調用與多點觸摸,使得對Button1的一點觸式,另一個是關於將Button2和兩個按鈕都高亮顯示,然後觸摸過Button1的將突出Button1的 unhighlight Button2的。同時,在與-touchesMoved:相同的調用中的相同循環中,通過觸摸Button2將基本上將Button1的突出顯示狀態重置爲未突出顯示。

-touchesMoved:只要有觸摸就會被調用,每次調用都會再次循環兩個按鈕。

也許你需要爲你的按鈕添加'hasBeenHighlighted'屬性。我不知道如何將所有按鈕的此屬性初始化爲NO。但是它需要在-setHighlighted內部設置爲YES,並且在調用-doActionX之前需要檢查

我不確定我是否完全明白你想要達到的目標,但我希望這對你有所幫助。

+0

這是有道理的。我創建了一個BOOL按鈕1,並且按照您的說法操作,但當兩個手指同時在按鈕內移動時,它仍然存在相同的問題。還有其他建議嗎? – c0dec0de 2010-10-25 21:59:53

+0

那麼, - 移動移動:*應*被調用很多次。問題是doAction1和doAction2被重複調用,對吧?您可能需要在-touchesBegan :, -touchesMoved:和-touchedEnded:的條目處添加一些NSLog()行。另外,在doActionX方法中。如果您在每次調用touchesMoved時看到對doActionX的調用,那就是問題所在。沒有看到代碼,很難知道我是否理解問題。 – westsider 2010-10-25 22:17:38

+0

嘿westsider,doActionX的調用肯定是問題。我只是不知道如何解決它。我已經更新了上面的代碼。我非常感謝你爲我尋找這個。謝謝。 – c0dec0de 2010-10-25 22:41:31