0

Apple のPage Control の例を使用しています。以下のコードを使用してアプリ自体でサウンドを再生することができましたが、何らかの理由で、サウンドを自動的に再生するように設定したページに到達する前に、サウンドが 1 ページ早くオフになりました。

- (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 に答える