拖动手指时帮助touchesMoved

时间:2010-10-25 18:50:38

标签: iphone objective-c

我正在实现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;
}

}

}

- (void)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)touchesEnded:(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;
            }
}

}

任何帮助都是非常明确的。谢谢!

2 个答案:

答案 0 :(得分:0)

如果-touchesMoved:通过多次触摸进行调用,使得Button1上有一次触摸而Button2上有另一次触摸,并且两个按钮都突出显示,则触摸Button1将突出显示Button1 unhighlight Button2。同时,在同一个-touchesMoved:调用的同一个循环中,触摸Button2将基本上将Button1的高亮状态重置为未突出显示。

-touchesMoved:只要有触摸就会被调用,每次调用都会再次循环两个按钮。

也许您需要在按钮上添加“hasBeenHighlighted”属性。我不知道如何最好地将所有按钮初始化此属性为NO。但是需要在-setHighlighted中设置为YES:并且需要在调用-doActionX之前检查

我不确定我是否完全明白你想要达到的目标,但我希望这会有所帮助。

答案 1 :(得分:0)

我最终通过在一个名为touchesCount的变量中存储屏幕上的触摸次数来使其工作。然后我在touchesBegan中增加它,并在touchesEnded中减少它。然后在调用doActionX之前的touchesMoved中,我检查以确保touchesCount< 2。