我正在實施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。謝謝!
這是有道理的。我創建了一個BOOL按鈕1,並且按照您的說法操作,但當兩個手指同時在按鈕內移動時,它仍然存在相同的問題。還有其他建議嗎? – c0dec0de 2010-10-25 21:59:53
那麼, - 移動移動:*應*被調用很多次。問題是doAction1和doAction2被重複調用,對吧?您可能需要在-touchesBegan :, -touchesMoved:和-touchedEnded:的條目處添加一些NSLog()行。另外,在doActionX方法中。如果您在每次調用touchesMoved時看到對doActionX的調用,那就是問題所在。沒有看到代碼,很難知道我是否理解問題。 – westsider 2010-10-25 22:17:38
嘿westsider,doActionX的調用肯定是問題。我只是不知道如何解決它。我已經更新了上面的代碼。我非常感謝你爲我尋找這個。謝謝。 – c0dec0de 2010-10-25 22:41:31