如何再次重用声音以及为啥我的声音在到达预期页面之前离开了一页?

Posted

技术标签:

【中文标题】如何再次重用声音以及为啥我的声音在到达预期页面之前离开了一页?【英文标题】:How to reuse the sound again and Why my sound went off one page before it gets to the intended page?如何再次重用声音以及为什么我的声音在到达预期页面之前离开了一页? 【发布时间】:2009-08-22 14:48:40 【问题描述】:

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

- (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】:

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

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

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

【讨论】:

我明白了。这很有意义。对不起,我是个菜鸟,如果你能告诉我应该使用什么代码来缓存声音 ID 以及你在哪里放置声音动作,那只是徘徊?在 AppDelegate.m 下?哪个班?

以上是关于如何再次重用声音以及为啥我的声音在到达预期页面之前离开了一页?的主要内容,如果未能解决你的问题,请参考以下文章

当我再次从其他页面(单独)访问主页时,如何将视差网站主页视频声音自动静音?

如何确切地知道为啥声音开始播放?

为啥 xcode 播放声音文件时没有任何资源路径?

推送到达时未播放自定义声音

如何在点击时播放声音?

如何播放与 AVAudioPlayer 重叠的相同声音?