2009-08-22 12 views
0

我使用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),我不知道這是爲什麼?

如果無法解決問題,則可能必須先解決該問題,然後將聲音放在每個要插入聲音的頁面之前。

另外,當我再次滾動到同一頁面時,如何再次播放聲音?看起來聲音只有在應用程序啓動後纔會觸發。

我非常感謝您的幫助。

+0

任何其他的答案?我需要幫助! – viper15 2009-08-23 15:16:29

回答

0

您應該緩存由AudioServicesCreateSystemSoundID返回到聲音ID,並重新使用每當你需要它。

此外,請注意viewDidLoad僅在視圖爲加載時纔會調用,不會顯示。並且可以在不同的時間調用加載時間來顯示時間。 (這是完全可能的觀看頁面2使第3頁上的自動負荷,因此再次觸發它。)

最後,這不是好的具有頁面顯示邏輯觸發的動作(如聲音)。相反,您應該將其移動到實際進行頁面轉換的圖層中。這將解決您的問題。

+0

我明白了。這很有道理。遺憾的是這樣一個菜鳥,只是遊蕩,如果你我能證明我應該使用什麼樣的代碼緩存到聲音ID和你在哪裏放音的行動呢?在AppDelegate.m下?和哪一類? – viper15 2009-08-22 23:02:57