Pergunta

Eu estou usando - (void) touchesMoved para fazer coisas sempre quando eu insira um quadro específico, neste caso, a área de um botão.

O meu problema é, eu só quero que ele faça coisas quando eu entrar no frame - não quando eu estou movendo meu dedo dentro do quadro.

Alguém sabe como eu posso chamar meus métodos apenas uma vez, enquanto eu estou dentro do quadro, e ainda me permita chamá-lo mais uma vez se eu digitá-la na mesma TouchMove.

Obrigado.

-(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];
    }
}
Foi útil?

Solução

Você pode usar algum atributo para verificar se o código já foi chamado quando foram entrar na área específica. Parece estado destacado do objeto p1 (não sei o que é) pode ser apropriado para isso:

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

Outras dicas

Simply add a BOOL que o check-in touchesMoved e repor em 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;
  }

tente usar um UIButton e usar o 'arrastar toque enter' conexão no Interface Builder.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top