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 :)

Foi útil?

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.

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