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;
}];
}];
}
이것은 문제를 해결하는 완벽한 방법 인 것처럼 보이지만 여전히 내 영화의 배경으로 추가 할 수는 없습니다. 줄 : [self.moviePlayer.backgroundView addSubview : stillImageView]; 가 구현되어 있지 않습니다. 파란색 배경색 (그림에 설정 한 것) 만 있으면 그 배경색이 배경색 위에 추가되지 않습니다. 대형 영화 파일 처리가 하드웨어 코덱으로 처리되어 이상한 행동을 유발할 수 있습니까? – Octave1
이상합니다. 나는 내가 전에했던 프로젝트에서이 포스트에 올린 코드를 가져 갔다. 문제를 재현 할 수 있는지 알아보기 위해 몇 가지 대안을 시도해 보겠습니다. –