0

我正在使用Apple 的Page Control 示例。我已经能够使用下面的代码在应用程序本身上播放声音,但由于某些原因,声音在到达我将声音设置为自动播放的页面之前提前一页消失了。

- (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)播放,我想知道这是为什么?

如果无法解决,我可能不得不采取解决方法,将声音放在我要插入声音的每个页面之前。

另外,当我再次滚动到同一页面时,如何再次播放声音?似乎只有在应用启动后才会触发一次声音。

我非常感谢您的任何帮助。

4

1 回答 1

0

您应该缓存 AudioServicesCreateSystemSoundID 返回的声音 ID,并在需要时重新使用它。

另外,请注意 viewDidLoad 仅在视图加载时调用,而不是显示。并且加载时间可能会在不同的时间调用以显示时间。(很可能查看第 2 页会导致第 3 页自动加载,因此会再次触发它。)

最后,让页面显示逻辑触发动作(如声音)并不好。相反,您应该将其移动到实际执行页面转换的层中。那会解决你的问题。

于 2009-08-22T19:20:37.140 回答