MPMoviePlayerViewController电影播放没有被问及

时间:2012-02-27 18:10:15

标签: iphone objective-c mpmovieplayercontroller

使用MPMoviePlayerViewController时遇到问题。我正在尝试在viewDidLoad上初始化电影,然后在touchesBegan上播放电影。但是电影最初开始播放,而touchesBegan它只显示完成的电影。

ViewController.h文件

@interface ViewController : UIViewController{

MPMoviePlayerController *moviePlayer;
MPMoviePlayerViewController *mpviewController;
MPMovieControlStyle controlStyle;}

- (IBAction)touchesBegan:(id)sender;
@property (nonatomic) MPMovieControlStyle controlStyle;
@end

ViewController.m

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

[self.view addSubview:mpviewController.view];
[moviePlayer play]; }


- (void)viewDidLoad
{
NSString *movpath = [[NSBundle mainBundle] 
                     pathForResource:@"my_moviefile" 
                     ofType:@"m4v"];

mpviewController = 
[[MPMoviePlayerViewController alloc]
 initWithContentURL:[NSURL fileURLWithPath:movpath]]; 

[[NSNotificationCenter defaultCenter]
 addObserver:self
 selector:@selector(movieFinishedCallback:)                                                 
 name:MPMoviePlayerPlaybackDidFinishNotification
 object:mpviewController];

MPMoviePlayerController *mp = [mpviewController moviePlayer];
// [mp setMovieControlMode:MPMovieControlModeHidden];
// [mp.view setFrame:CGRectMake(0, 0, 250, 263)]; 
mp.controlStyle = MPMovieControlStyleNone;    
[mp prepareToPlay];

[super viewDidLoad];
}

如果我把所有代码放在touchesBegan中,它按预期工作,但电影仍然需要加载,但我想预先加载它,然后在完成播放后再做一些事情。

任何线索?

此致

2 个答案:

答案 0 :(得分:2)

考虑将[super viewDidLoad]放在viewDidLoad实施的顶部。这通常会导致不可预测的问题。

另外,只需尝试在[mp pause]末尾添加mp.currentPlaybackTime = 0;viewDidLoad

答案 1 :(得分:1)

确保在初始化播放器时将MPMoviePlayerController的属性shouldAutoplay设置为NO

参考文献:

shouldAutoplay

一个布尔值,指示电影是否应自动开始播放。

@property (nonatomic) BOOL shouldAutoplay
  

讨论

     

此属性的默认值为YES。此属性确定   是否自动开始播放基于网络的内容   当有足够的缓冲数据以确保不间断播放时。

状况 适用于iOS 3.2及更高版本。 宣告进入 MPMoviePlayerController.h