Consultando o número atual de toques na tela sem usar eventos no iPhone
-
27-09-2019 - |
Pergunta
Eu tenho um aplicativo que começa a reproduzir um som quando o usuário toca na UIView e muda para tons diferentes, enquanto o usuário desliza o dedo na tela. O som para quando o usuário levanta o dedo.
Estou usando o TouchesBegan, movi e terminei os eventos para isso.
Meu problema é que os toques terminados (e/ou cancelados) às vezes não são disparados corretamente e o som continua jogando mesmo depois que o dedo é retirado da tela.
Portanto, como uma solução alternativa, gostaria de implementar um cronômetro que verificasse o número de toques na tela e, se for zero, ele verificará e interromperá o Audioplayer, se estiver tocando.
Eu tenho procurado algum código que poderia me dar o número de toques como
Uitouch *toques = [self getallTouchesonscreen];
ou alguma coisa :)
Solução
Os toques terminam às vezes não são demitidos.
Tentei definir pontos de interrupção para toques cancelados e os toques terminaram os eventos e às vezes não acerta.
Experimente o programa de amostra GLPaint no site da Apple e tente um nslog em toches terminado e faça alguns desenhos rápidos na tela e levante o dedo rápido, como jogar o dedo fora da tela.
Você saberá o que quero dizer. Minha solução atual para isso envolve acelerômetro :)
Dica: eu uso isso para encontrar todos os eventos: (void) sendEvent: (uievent *) evento
Outras dicas
NSSet *allTouches = [event allTouches];
for(GLuint index = 0; index < [allTouches count]; ++index)
{
UITouch *touch = [[allTouches allObjects] objectAtIndex:index];
if([touch phase] != UITouchPhaseCancelled)
{
CGPoint touchPoint = [touch locationInView:self];
//do something with touchPoint that has state [touch phase]
}
}
Você pode usar esse código em todas as funções de eventos de toque (touchesbegan, touchsended, touchesmoved) e pode contar toques e conhecer seus estados.
Não se esqueça do toquescâncias. Adicione esta função/método e NSLog It quando um toque terminar lá em cima Penso que você encontrará alguns toques ausentes.
Se você está procurando uma contagem de torneiras - tocando no mesmo lugar mais de uma vez sem mover muito o dedo - você pode obtê -lo por:
-(void)iPhoneTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint touchPosition = [touch locationInView:self];
lastTouchTime = [touch timestamp];
myTouchCount = [touch tapCount];
Mas também faço isso manualmente usando o TouchesMoved para ver até que ponto ele se moveu e cancelando a capacidade de dobrar/triplicar se alguma das torneiras se movesse longe demais e contando torneiras, desde que você esteja em um estado de torneira válido.