Como chamar um método apenas uma vez durante - (void) touchesMoved?
-
19-09-2019 - |
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];
}
}
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.