- (void)viewDidLoad {
// 노티센터에 상태값 등록
// 동영상 상태값 변경
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerPlaybackStateDidChange:) name:MPMoviePlayerPlaybackStateDidChangeNotification object:self.movieController];
// 동영상 종료 원인 파악
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:self.movieController];
}
-(void) moviePlayerPlaybackStateDidChange:(NSNotification*)notification {
MPMoviePlayerController *moviePlayer = notification.object;
MPMoviePlaybackState playbackState = moviePlayer.playbackState;
switch (playbackState) {
case MPMoviePlaybackStateStopped:
NSLog(@"종료이벤트 발생");
break;
case MPMoviePlaybackStatePlaying:
NSLog(@"MPMoviePlaybackStatePlaying");
break;
case MPMoviePlaybackStatePaused:
NSLog(@"MPMoviePlaybackStatePaused");
break;
case MPMoviePlaybackStateInterrupted:
NSLog(@"MPMoviePlaybackStateInterrupted");
break;
case MPMoviePlaybackStateSeekingForward:
NSLog(@"MPMoviePlaybackStateSeekingForward");
break;
case MPMoviePlaybackStateSeekingBackward:
NSLog(@"MPMoviePlaybackStateSeekingBackward");
break;
default:
break;
}
/*
MPMoviePlaybackStateStopped : 동영상이 정지됨
MPMoviePlaybackStatePlaying : 동영상이 재생중
MPMoviePlaybackStatePaused : 동영상이 일시정지
MPMoviePlaybackStateInterrupted : 동영상 재생이 일시적으로 멈춤 (동영상 버퍼가 부족)
MPMoviePlaybackStateSeekingForward : 동영상을 끝으로 빨리감기중
MPMoviePlaybackStateSeekingBackward : 동영상을 처음으로 향해 빨리감기중
*/
}
- (void)playbackDidFinish:(NSNotification *)noti {
MPMoviePlayerController *player = [noti object];
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:player]; // 동영상 상태 노티 제거
[player stop];
NSDictionary *userInfo = [noti userInfo]; // 종료 원인 파악
if ([[userInfo objectForKey:@"MPMoviePlayerPlaybackDidFinishReasonUserInfoKey"] intValue] == MPMovieFinishReasonUserExited) {
NSLog(@"유저종료");
[self.navigationController popViewControllerAnimated:YES];
}
else {
NSLog(@"자연종료");
[self showPopup]; // 이 함수는 유저종료가 아닌 플레이 완료로 인한 종료시 팝업뷰를 호출하기 위해 만든 개인 함수입니다.
}
}
이번에 MPMoviePlayerController를 통해 동영상 플레이어를 만들던 중 이용자의 행동에 따른 메세지 분기처리가 필요하여 알게 된 내용입니다.
이용자가 완료를 누르면 리스트로 이동을 해야 하고, 이용자가 동영상을 끝까지 봤으면 다음동영상을 보시겠냐? 식의 팝업뷰를 호출해야 하는데
완료버튼을 눌렀을 때와 동영상을 끝까지 봤을 때 날라오는 이벤트가 동일하더군요.
위처럼 노티 등록해주고 NSDictionary로 원인 파악하면 분기가 가능하네요.
'프로그래밍 > iOS' 카테고리의 다른 글
Xcode 에서 라이브러리 파일(*.a)가 ignore 처리되어 SVN에 등록되지 않을때 해결방법 (0) | 2012.05.24 |
---|---|
메모리 관리 규칙 (0) | 2012.05.19 |
푸쉬 알림 관련 자료 (0) | 2012.05.09 |
IAP 관련 정리 자료 (0) | 2012.05.09 |
uiwebview 사용 시 확대 축소 (0) | 2012.05.09 |