如何在 - (void)touchesMoved期间只调用一次方法?

时间:2010-02-10 06:16:21

标签: iphone uiview uitouch touchesmoved

当我输入特定的框架时,我正在使用- (void) touchesMoved来执行操作,在这种情况下是按钮的区域。

我的问题是,当我在框架内移动手指时,我只想让它在进入框架时执行操作 -

当我在框架内时,有没有人知道如何只调用我的方法一次,如果我在同一个touchMove中重新输入它,我仍然可以再次调用它。

谢谢。

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [[event touchesForView:self.view] anyObject];

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

    if(CGRectContainsPoint(p1.frame, location))
    {
            //I only want the below to me called 
            // once while I am inside this frame
        [self pP01];
        [p1 setHighlighted:YES];
    }else {
        [p1 setHighlighted:NO];
    }
}

4 个答案:

答案 0 :(得分:1)

您可以使用某个属性来检查在输入特定区域时是否已调用代码。它看起来像p1对象的突出显示状态(不确定它是什么)可能适合于此:

if(CGRectContainsPoint(p1.frame, location))
{
   if (!p1.isHighlighted){ // We entered the area but have not run highlighting code yet
        //I only want the below to me called 
        // once while I am inside this frame
      [self pP01];
      [p1 setHighlighted:YES];
   }
}else { // We left the area - so we'll call highlighting code when we enter next time
    [p1 setHighlighted:NO];
}

答案 1 :(得分:1)

Simply add a BOOL您在touchesMoved中检查并在touchesEnded中重置

答案 2 :(得分:1)

if( CGRectContainsPoint([p1 frame],[touch locationInView:self.view])) {
   NSLog (@"Touch Moved over p1");
  if (!p14.isHighlighted) {
   [self action: p1];
   p1.highlighted = YES; 
   }
  }else {
   p1.highlighted = NO;
  }

答案 3 :(得分:0)

尝试使用UIButton并使用Interface Builder中的“touch drag enter”连接。