2012-04-21 3 views
1

iPad 응용 프로그램에서 두 영화 사이에 부드러운 크로스 페이드를 만들려고합니다. 버튼을 누르면 시각적으로 무작위로 재생되는 & 동영상이 다음 영화로 사라집니다.MPMoviePlayerController를 사용하여 두 영화 사이를 전환

두 개의 동영상을 동시에 (즉, 문서에서) 재생할 수 없기 때문에 간단한 크로스 페이드를 사용할 수 없습니다. 이 문제를 해결하기 위해 나는 새 영화의 초기 프레임의 정지 이미지를 사용합니다 (페이드 인 될 것입니다). 나는 영화의 교류를 다루기 위해 두 명의 플레이어를 사용했다.

원본 동영상이 일시 중지 된 경우 이미지로 전환됩니다. 이제 alpha = 0.0 인 두 번째 영화 &을 추가하여 알파 = 1로 전환했습니다. 그런 다음 새 영화를 재생합니다. 이것은 새로운 영화가 이미지 위로 전환함에 따라 두드러진 어둡기를 제외하고는 모두 잘 작동합니다.

스틸 이미지없이 시험해 보았습니다. & 어둡게하는 것은 상기 천이 중에 발생하지 않는 것 같습니다.

스위치에 대한 내 코드가 아래에 있습니다 (if 문의 처음 부분). 이상하게 보입니다.하지만 필자가 필요로하는 것에 가장 가까이 다가 가게하는 방법입니다.

아마도이 작업을 수행하는 더 좋은 방법이 있을까요?

- (void) switchMovie; 
{ 

NSURL *movieImageUrl = [movieImageUrlArray objectAtIndex:index]; 
NSData *data = [NSData dataWithContentsOfURL:movieImageUrl]; 
UIImage *movieImage = [[UIImage alloc] initWithData:data]; 
UIImageView *image = [[UIImageView alloc] initWithImage:movieImage]; 

image.alpha = 0.0f; 
[self addSubview:image]; 

if (moviePlayer1Playing) { 

moviePlayer1Playing = NO; 
moviePlayer2Playing = NO; 

[moviePlayer1 pause]; //pausing later in the method caused a crash, stopping causes a crash. 

[UIView animateWithDuration:1.0 
         delay:0.0 
        options:UIViewAnimationCurveEaseIn 
       animations:^{ 

        image.alpha = 1.0f;    //fade in still of first frame of new movie 

       } completion:^(BOOL finished) { 

        [moviePlayer1 release]; //release original movie. 

        moviePlayer2 = [[MPMoviePlayerController alloc] initWithContentURL:[movieUrlArray objectAtIndex:index]]; 

        moviePlayer2.shouldAutoplay = NO; 
        [moviePlayer2 prepareToPlay]; 
        [moviePlayer2 setControlStyle:MPMovieControlStyleNone]; 
        moviePlayer2.scalingMode = MPMovieScalingModeAspectFill; 
        [moviePlayer2.view setFrame:CGRectMake(0, 0, 1024 , 768)]; 
        moviePlayer2.view.backgroundColor = [UIColor clearColor]; 
        moviePlayer2.view.alpha = 0.0; 
        [self addSubview:moviePlayer2.view]; 

        [UIView animateWithDuration: 3.0 
              delay: 0.0 
             options: UIViewAnimationCurveLinear 
             animations:^(void){ 

             moviePlayer2.view.alpha = 1.0f; 
             //During this transition the view goes dark half-way through, before lightening again. 

             } completion:^ (BOOL finished) { 

              [moviePlayer2 play]; 
              moviePlayer2Playing = YES; 
              moviePlayer1Playing = NO; 


             }]; 

       }]; 


} 

답변

1

표시되는 검은 :) 미리 감사는 동영상 플레이어의 배경, 그래서 대신 정지에 대한있는 UIImageView를 사용하여, 당신은 여전히 ​​원하는 동영상 플레이어의 배경을 설정해야합니다.

UIImageView *stillImageView = [UIImageView alloc]initWithImage:stillImage]; 
stillImageView.frame = self.moviePlayer.backgroundView.frame; 

[self.moviePlayer.backgroundView addSubview:stillImageView]; 
[stillImageView release]; 
+0

이것은 문제를 해결하는 완벽한 방법 인 것처럼 보이지만 여전히 내 영화의 배경으로 추가 할 수는 없습니다. 줄 : [self.moviePlayer.backgroundView addSubview : stillImageView]; 가 구현되어 있지 않습니다. 파란색 배경색 (그림에 설정 한 것) 만 있으면 그 배경색이 배경색 위에 추가되지 않습니다. 대형 영화 파일 처리가 하드웨어 코덱으로 처리되어 이상한 행동을 유발할 수 있습니까? – Octave1

+0

이상합니다. 나는 내가 전에했던 프로젝트에서이 포스트에 올린 코드를 가져 갔다. 문제를 재현 할 수 있는지 알아보기 위해 몇 가지 대안을 시도해 보겠습니다. –

관련 문제