J'ai un fichier audio qui doit disparaître lorsque l'utilisateur fait défiler un UIScrollView. Cependant, toute méthode performSelector:withObject:afterDelay:
est bloquée jusqu'à ce que l'utilisateur arrête de défiler. J'ai donc essayé de créer un code pour effectuer une fadeout sur un autre thread:Comment faire pour masquer un AVAudioPlayer sur un thread d'arrière-plan?
- (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 obtient jusqu'à la performSelector, mais pas plus loin parce que je suppose qu'il essaie d'exécuter sur un fil, il n'a pas accès. Je ne peux même pas le changer pour performSelector:onThread:withObject:waitUntilDone:
parce qu'il n'y a pas d'option de délai.
Des idées? Pourquoi ont-ils rendu si difficile de faire disparaître un son? moan
Merci!
génie absolu. Merci! :) – jowie
Divin! merci @MartinCote! –