2011-03-26 78 views
1

我在我的UIView中使用MPMoviePlayerController,目标是将它放在视图上作为内联视图。问题是除了全屏外,代码无法工作。iOS 4.3 Inline MPMoviePlayerController

-(IBAction)startVideo { 
    //start video here 
    NSURL *path = [[NSURL alloc] initWithString:[self localVideoPath:NO]]; 

    // Create custom movie player 
    MPMoviePlayerController *moviePlayer = [[[MPMoviePlayerController alloc] initWithContentURL:path] autorelease]; 

    [moviePlayer setScalingMode:MPMovieScalingModeAspectFill]; 
    [moviePlayer setControlStyle:MPMovieControlStyleNone]; 
    [moviePlayer setFullscreen:FALSE]; 

    // May help to reduce latency 
    [moviePlayer prepareToPlay]; 

    [[NSNotificationCenter defaultCenter] 
     addObserver:self 
     selector:@selector(onMSAASDone:) 
     name:MPMoviePlayerPlaybackDidFinishNotification 
     object:moviePlayer]; 


    //---play partial screen--- 
    //moviePlayer.view.frame = CGRectMake(0, 0, 200, 300); 
    moviePlayer.view.frame = image.frame; 
    //[[moviePlayer view] setFrame: [image bounds]]; 

    [image removeFromSuperview]; 

    [self.view addSubview:moviePlayer.view]; 

    // Show the movie player as modal 
    //[self presentModalViewController:moviePlayer animated:YES]; 

    // Prep and play the movie 
    [moviePlayer play]; 
} 

回答

1

Apple提供的示例代码存在缺陷或者说过时。您需要将moviePlayer的视图作为子视图添加到您的视图中。这样的事情:

MPMoviePlayerController *moviePlayer = [[[MPMoviePlayerController alloc] initWithContentURL:path] autorelease]; 
... 
// Adjust positioning where I used the bound of the outer view (of type UIView) 
moviePlayer.view.frame = outerView.bounds; 
// Now add the movie player to the outer view 
[outerView addSubView:moviePlayer.view]; 
... 

这应该是诀窍。

对不起,我没有看到你已经添加了子视图。

好了,对于一个示例代码,你可以叫MoviePlayer_iPhone Xcode的样本项目(为的MPMoviePlayerController Xcode的文档里面,你会发现一个链接,MoviePlayer样本项目),只是调整AppDelegate中的initAndPlayMovie这方法:

-(void)initAndPlayMovie:(NSURL *)movieURL 
{ 
    // Initialize a movie player object with the specified URL 
    MPMoviePlayerController *mp = [[MPMoviePlayerController alloc] initWithContentURL:movieURL]; 
    if (mp) 
    { 
     // save the movie player object 
     self.moviePlayer = mp; 
     [mp release]; 

     // Apply the user specified settings to the movie player object 
     [self setMoviePlayerUserSettings]; 

     self.moviePlayer.view.frame = self.window.bounds;    
     [self.window addSubview:self.moviePlayer.view]; 

     // Play the movie! 
     [self.moviePlayer play]; 
    } 
} 

这一个是原油,因为它不设置框架或中心的看法,但它应该显示的电影,当你去当地并点击播放电影

我看到的唯一缺点是全屏不会变黑。这就是说这个示例项目很奇怪,写得不好。这表示它显示非全屏视频。

+0

我还没有这样做? – Neutralizer 2011-03-27 06:33:25

+0

你可以创建一个简单的项目,你在视图内添加MPMoviePlayerController作为内联,它从资源播放视频?看看你是如何做到这一点真的很有帮助。因为我已经尝试了各种方式,而且它不起作用。 – Neutralizer 2011-03-27 06:44:39

+0

你知道我认为框架和位置部分在这里更为关键。你可以重新写它来使用框架或边界? – Neutralizer 2011-03-28 11:49:35