2012-04-21 55 views
1

我試圖在iPad應用程序中的2部電影之間進行平滑淡入淡出。在一個按鈕點擊視覺隨機&正在播放淡出電影下一部電影。使用MPMoviePlayerController的2部電影之間的轉換

由於2部電影不能同時播放(來自文檔),因此無法直接進行淡入淡出。爲了解決這個問題,我使用新電影初始幀的靜止圖像(要淡入)。我用兩名球員來處理電影的交流。

原始電影暫停,然後我轉換到圖像。現在我添加我的第二部電影(alpha = 0.0)&然後轉換,使其alpha = 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.movi​​ePlayer.backgroundView addSubview:stillImageView]; 未實現 - 我所能看到的只是藍色背景色(我爲說明而設置),靜止圖像不會添加到背景顏色上。處理大型電影文件是否可能由硬件編解碼器處理,從而導致奇怪的行爲? – Octave1 2012-04-22 19:41:51

+0

這很奇怪。我從我之前完成此項目的項目中獲取了我在此發佈的代碼。我會嘗試一些不同的變化,看看我是否可以重新創建您的問題。 – 2012-04-22 21:39:37

相關問題