Как снова использовать звук и почему мой звук отключился на одну страницу, прежде чем он попал на нужную страницу? - PullRequest
0 голосов
/ 22 августа 2009

Я использую Пример управления страницей от Apple. Я смог воспроизвести звук в самом приложении, используя приведенный ниже код, но по некоторым причинам звук пропал рано на одной странице, прежде чем он попал на страницу, где я установил свой звук для автоматического воспроизведения.

- (void)viewDidLoad {
    pageNumberLabel.text = [NSString stringWithFormat:@"Page %d", pageNumber + 1];
    self.view.backgroundColor = [MyViewController pageControlColorWithIndex:pageNumber];

if (pageNumber == 3) {

        NSString *clapPath = [[NSBundle mainBundle] pathForResource:@"nearSound" ofType:@"caf"];
        CFURLRef clapURL = (CFURLRef ) [NSURL fileURLWithPath:clapPath];
        AudioServicesCreateSystemSoundID(clapURL, &testID);
        AudioServicesPlaySystemSound(testID);
}

Итак, предположительно, когда я перехожу на страницу 4 (pageNumber == 3), звук будет воспроизводиться, но он воспроизводился на странице 3 (pageNumber == 2), мне интересно, почему это так?

Если это не может быть решено, мне, вероятно, придется сделать обходной путь, затем поставить звук перед каждой страницей, в которую я хочу вставить звук.

Кроме того, как я могу воспроизвести звук снова, когда снова прокручиваю на ту же страницу? Кажется, что звук запускается только один раз после запуска приложения.

Я бы очень признателен за любую вашу помощь.

1 Ответ

0 голосов
/ 22 августа 2009

Вам следует кэшировать идентификатор звука, возвращаемый AudioServicesCreateSystemSoundID, и использовать его повторно всякий раз, когда вам это нужно.

Также обратите внимание, что viewDidLoad вызывается только тогда, когда представление загружено , а не отображается. Время загрузки может быть вызвано в другое время для отображения времени. (Вполне возможно, что просмотр страницы 2 вызывает автоматическую загрузку на странице 3, следовательно, вызывает ее снова.)

Наконец, нехорошо иметь логику отображения страницы, запускающую действия (например, звук). Вместо этого вы должны переместить его в слой, который фактически выполняет переход страницы. Это решит вашу проблему.

...