Как вызвать метод только один раз во время -(void)touchesMoved?

StackOverflow https://stackoverflow.com/questions/2234822

Вопрос

Я использую - (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];
    }
}
Это было полезно?

Решение

Вы можете использовать какой-либо атрибут, чтобы проверить, был ли уже вызван код при входе в определенную область.Похоже на выделенное состояние 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];
}

Другие советы

Simply add a BOOL что вы проверяете в TouchesПеремещено и сброшено в TouchesEnded

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;
  }

попробуйте использовать UIButton и используйте соединение «сенсорное перетаскивание» в Interface Builder.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top