viewDidUnload - остановка метода при изменении представления - PullRequest
0 голосов
/ 09 октября 2010

Я пытаюсь остановить воспроизведение аудиофайла при изменении вида.

Я использую tabController и хотел бы, чтобы воспроизводимое аудио останавливалось, когда пользователь переходит в другое представление. Я не уверен, где и как я это сделаю. в viewDidUnload возможно?

вот метод, который я использую для воспроизведения аудиофайла:

- (void) startPlaying { [NSTimer scheduleTimerWithTimeInterval: 15 target: self selector: @selector (startPlaying) userInfo: nil повторов: NO];

NSString * audioSoundPath = [[NSBundle mainBundle] pathForResource: @ "audio_file" ofType: @ "caf"]; CFURLRef audioURL = (CFURLRef) [NSURL fileURLWithPath: audioSoundPath]; AudioServicesCreateSystemSoundID (audioURL, & audioID); AudioServicesPlaySystemSound (audioID); }

спасибо за любую помощь

1 Ответ

2 голосов
/ 09 октября 2010

Что-то вроде этого в вашем контроллере представления (не проверено):

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Load sample
    NSString *audioSoundPath = [[NSBundle mainBundle] pathForResource:@"audio_file"
                                                                ofType:@"caf"];
    CFURLRef audioURL = (CFURLRef)[NSURL fileURLWithPath:audioSoundPath];
    AudioServicesCreateSystemSoundID(audioURL, &audioID)
}

- (void)viewDidUnload
{
    // Dispose sample when view is unloaded
    AudioServicesDisposeSystemSoundID(audioID);

    [super viewDidUnload];
}

// Lets play when view is visible (could also be changed to viewWillAppear:)
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    [self startPlaying];
}

// Stop audio when view is gone (could also be changed to viewDidDisappear:)
- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    if([self.audioTimer isValid]) {
        [self.audioTimer invalidate];
    }
    self.timer = nil;
}

// Start playing sound and reschedule in 15 seconds.
-(void)startPlaying
{
    self.audioTimer = [NSTimer scheduledTimerWithTimeInterval:15 target:self   
                                                     selector:@selector(startPlaying)
                                                     userInfo:nil
                                                      repeats:NO];
    AudioServicesPlaySystemSound(audioID);
}

Отсутствует:

  • Ошибка проверки
  • Свойство или ivar для audioTimer.
  • Может также сохранить тот же таймер с повторениями YES.
  • Освобождение ресурсов в dealloc.
  • Тестирование
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...