Как я могу отключить AVAudioPlayer в фоновом потоке?

У меня есть аудиофайл, который должен исчезнуть, пока пользователь прокручивает UIScrollView. Однако любой метод performSelector: withObject: afterDelay: блокируется до тех пор, пока пользователь не прекратит прокрутку. Итак, я попытался создать некоторый код для выполнения затухания в другом потоке:

- (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];  
    }
}

Он доходит до performSelector, но не дальше, потому что я думаю, что это ' s пытается выполнить поток, к которому у него нет доступа. Я даже не могу изменить его для performSelector: onThread: withObject: waitUntilDone: , потому что нет опции задержки.

Есть идеи? Почему они так усложнили, чтобы просто заглушить звук? стон

Спасибо!

7
задан jowie 16 November 2010 в 14:18
поделиться