2009-08-22 7 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

답변

0

AudioServicesCreateSystemSoundID에서 반환 한 사운드 ID를 캐싱하고 필요할 때마다 다시 사용해야합니다.

또한 viewDidLoad는보기가 이로드되고이로드 된 경우에만 호출됩니다. 그리고로드 시간은 시간을 표시하기 위해 다른 시간에 호출 될 수 있습니다. (2 페이지를 보는 것이 3 페이지에 자동으로로드되므로 다시 트리거 할 가능성이 있습니다.)

마지막으로 소리와 같은 동작을 트리거하는 페이지 표시 논리가있는 것은 좋지 않습니다. 대신 실제로 페이지 전환을 수행하는 레이어로 이동해야합니다. 그것은 당신의 문제를 해결할 것입니다.

+0

알겠습니다. 그것은 많은 의미가 있습니다. 그런 멍청한 녀석 인 것에 대해 유감스럽게 생각하며, 사운드 ID를 캐시하기 위해 어떤 코드를 사용해야하는지, 그리고 사운드 동작을 어디에 두어야 하는지를 알 수 있다면 방황 할 수 있습니까? AppDelegate.m에서? 어떤 클래스? – viper15