J'ai un fichier audio qui doit disparaître en fondu pendant que l'utilisateur fait défiler une UIScrollView. Cependant, toute performSelector:withObject:afterDelay:
est bloquée jusqu'à ce que l'utilisateur ait arrêté le défilement. J'ai donc essayé de créer du code pour effectuer un fondu enchaîné sur un autre fil :
- (void)fadeOut
{
[NSThread detachNewThreadSelector:@selector(fadeOutInBackground:) toTarget:self withObject:self.audioPlayer];
}
- (void)fadeOutInBackground:(AVAudioPlayer *)aPlayer
{
NSAutoreleasePool *myPool = [[NSAutoreleasePool alloc] init];
[self performSelector:@selector(fadeVolumeDown:) withObject:aPlayer afterDelay:0.1];
[myPool release];
}
- (void)fadeVolumeDown:(AVAudioPlayer *)aPlayer
{
aPlayer.volume = aPlayer.volume - 0.1;
if (aPlayer.volume < 0.1) {
[aPlayer stop];
} else {
[self performSelector:@selector(fadeVolumeDown:) withObject:aPlayer afterDelay:0.1];
}
}
Il va jusqu'au performSelector, mais ne va pas plus loin, car je suppose qu'il essaie de s'exécuter sur un thread auquel il n'a pas accès. Je ne peux même pas le modifier pour performSelector:onThread:withObject:waitUntilDone:
parce qu'il n'y a pas d'option de retard.
Des idées ? Pourquoi est-il si difficile de faire disparaître un son ? gémir
Gracias.