2012-05-29 6 views
0

아래 코드는 제가 작업하고있는 코드입니다. 나는/원하는 것은Core Animation + Core Audio + 수면이 예상대로되지 않습니다.

기대 :

  • 이미지가 페이드; 소리가 들린다; 지연; 이미지가 희미 해집니다.

    • 지연, 사운드 재생을 어떻게됩니까

    는 이미지가 페이드 다음

많은 감사 어떤 도움 직후 페이드 아웃.

ViewController.m

[self fadein]; 
NSString *tempFN; 
SystemSoundID soundID; 
tempFN = [[NSString alloc] initWithFormat:@"%@.caf", 
      [myGlobals.gTitleArray objectAtIndex:myGlobals.gQuoteCountForLoop]]; 
NSString *soundFilePath = [NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] resourcePath], tempFN]; 
NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath]; 
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback; 
AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, 
         sizeof (sessionCategory), 
         &sessionCategory); 
AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundFileURL, &soundID); 
AudioServicesPlaySystemSound(soundID); 

// Now fade-out the image after a few seconds delay 
sleep(3); 
[self fadeout]; 

-(IBAction)fadein 
{ 
    [UIImageView beginAnimations:NULL context:nil]; 
    [UIImageView setAnimationDuration:2]; 
    [faceImage setAlpha:0.3]; 
    [UIImageView commitAnimations]; 
} 

-(IBAction)fadeout 
{ 
    [UIImageView beginAnimations:NULL context:nil]; 
    [UIImageView setAnimationDuration:1]; 
    [faceImage setAlpha:0]; 
    [UIImageView commitAnimations]; 
} 

답변

1

난 당신이 사용할 때 문제가 생각 "절전 (5)". sleep() 함수를 사용하면 주 스레드를 차단하므로 해당 시간 동안 아무 것도 할 수 없습니다. 어쩌면 일부 명령 줄 유틸리티를 제외하고는 Objective-C에서 sleep() 함수를 사용하는 것이 매우 드뭅니다. sleep() 함수 대신 NSTimer를 사용하는 것이 좋습니다.

희망이 도움이됩니다.

// 편집 또한 sleep()을 사용해야 할 경우 NSThread 클래스의 sleepForTimeInterval : 함수를 사용하고 나머지 코드는 보조 스레드에서 실행해야합니다. 다시 한번 나는 sleep() 함수 나 관련된 함수를 사용해야한다고 생각하지 않는다.

0

다른 포스터는 말했다, 잠은 문제입니다. 수면은 주 스레드를 고정시킵니다. 잠을 잊어 버려라. 절대 사용하지 마십시오. 수면이 유효 한 유일한 시간은 해당 스레드가 일정 기간 동안 실행을 멈추게하고 보조 스레드에서 동시성 (매우 고급 주제)을 수행하는 것을 정말로 알고있는 경우입니다 (매우 고급 주제)

애니메이션 : 당신이 animateWithDuration을 사용하는 애니메이션 코드를 재 작성해야 완료 : 애니메이션 : 완료 :

각 애니메이션이로 실행됩니다

이 animateWithDuration에 중첩 호출을 사용하여 다음 애니메이션을 호출 완료 블록을 제공 끝내고 다음 것을 호출합니다.

자세히 알아 보려면 AVAudioPlayer를 살펴보아야합니다. AudioServices보다 강력하고 사용하기가 쉽습니다. AVAudioPlayer를 생성하고 재생하도록 지정합니다.

사운드가 경쟁 할 때까지 기다리는 단계를 원하면 AVAudioPlayer는 사운드 재생이 끝나면 호출 할 대리자를 사용합니다. 당신이 당신의 애니메이션 시퀀스를 시작하기 전에 AVAudioPlayer 설정

와 뷰 컨트롤러 그것의 대리자를 만들 : 여기

내가 애니메이션 순서를 재 작업 제안 방법은 다음과 같습니다.

animateWithDuration : animations : 애니메이션 호출이 페이드 인하는 완료 통화를 작성합니다.

완료 블록에서 재생중인 AVAudioPlayer를 시작하십시오.

AVAudioPlayer 대리자 메서드 audioPlayerDidFinishPlaying : 성공적으로 : 다른 animateWithDuration : animations : completion : 메서드를 다시 호출하여 페이드 아웃하는 메서드입니다.

관련 문제