MPMoviePlayerController 在 iOS4 中不起作用
Posted
技术标签:
【中文标题】MPMoviePlayerController 在 iOS4 中不起作用【英文标题】:MPMoviePlayerController not working in iOS4 【发布时间】:2010-07-14 15:28:37 【问题描述】:我正在使用来自的第一个答案 ios 4 + MPMoviePlayerController
尝试让MPMoviePlayerController
玩。在模拟器(iOS4 的 iPhone 设备)中,我听到声音但没有视频。在设备(iPhone 3GS 和 iOS4)上,我什么也没得到。这是我的代码:
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:moviePath]];
moviePlayer.movieControlMode = MPMovieControlModeDefault;
if ([moviePlayer respondsToSelector:@selector(view)])
moviePlayer.controlStyle = MPMovieControlStyleFullscreen;
[moviePlayer.view setFrame:self.view.bounds];
[self.view addSubview:moviePlayer.view];
[moviePlayer play];
任何想法我做错了什么?
【问题讨论】:
【参考方案1】:我刚刚在 iOS4 + iPhone 4(和 3GS)上测试了以下代码——它运行良好。乍一看,我认为您的代码的问题是没有在您的 MPMoviePlayerController
实例上调用 setFullscreen:animated
。
- (void)willEnterFullscreen:(NSNotification*)notification
NSLog(@"willEnterFullscreen");
- (void)enteredFullscreen:(NSNotification*)notification
NSLog(@"enteredFullscreen");
- (void)willExitFullscreen:(NSNotification*)notification
NSLog(@"willExitFullscreen");
- (void)exitedFullscreen:(NSNotification*)notification
NSLog(@"exitedFullscreen");
[self.movieController.view removeFromSuperview];
self.movieController = nil;
[[NSNotificationCenter defaultCenter] removeObserver:self];
- (void)playbackFinished:(NSNotification*)notification
NSNumber* reason = [[notification userInfo] objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey];
switch ([reason intValue])
case MPMovieFinishReasonPlaybackEnded:
NSLog(@"playbackFinished. Reason: Playback Ended");
break;
case MPMovieFinishReasonPlaybackError:
NSLog(@"playbackFinished. Reason: Playback Error");
break;
case MPMovieFinishReasonUserExited:
NSLog(@"playbackFinished. Reason: User Exited");
break;
default:
break;
[self.movieController setFullscreen:NO animated:YES];
- (void)showMovie
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willEnterFullscreen:) name:MPMoviePlayerWillEnterFullscreenNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willExitFullscreen:) name:MPMoviePlayerWillExitFullscreenNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(enteredFullscreen:) name:MPMoviePlayerDidEnterFullscreenNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(exitedFullscreen:) name:MPMoviePlayerDidExitFullscreenNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackFinished:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
NSURL* movieURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"tron" ofType:@"mov"]];
self.movieController = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
if ([self.movieController respondsToSelector:@selector(view)])
self.movieController.view.frame = self.view.frame;
[self.view addSubview:movieController.view];
[self.movieController setFullscreen:YES animated:YES];
[self.movieController play];
// This method is set as the action for an on-screen button
- (void)movieTime:(id)sender
[self showMovie];
【讨论】:
不适用于 iOS4 和 iPhone 3GS。在调试器中,它到达 self.movieController.view.frame 行并跳过接下来的两个。 如果我没看错,你是说执行到第一行 inside if 块但跳过接下来的两行?似乎极不可能。让我挖出我们的 3GS 测试单元之一…… ... 是的,在这里可以使用运行 iOS4 的 3GS。可能会有所不同的是上下文——在我的应用程序中,代码是从事件处理程序调用的,而不是在viewDidLoad
我已经用UIViewController
实例中的所有相关代码编辑了我的原始答案。
谢谢。现在,当我将您更新的代码放入其中时,self.view 上出现错误。我所在的文件是 NSObject 类型的。它是从 UIView 调用的。 NSObject 文件是否需要创建一个视图来放置视频播放器?另外,你在哪里处理所有的玩家分配?每次播放视频时我都会分配。【参考方案2】:
对于MPMoviePlayerController
view
是一个属性,而不是一个方法,所以如果它没有为它合成或编写的方法(即声明为@dynamic),你不能在它上面使用respondsToSelector:
。我认为 UIKit 中的大多数只读属性都是如此。
【讨论】:
任何@property都会有对应的getter方法。 显然不是,因为respondsToSelector:
将始终返回带有动态属性的 false。以上是关于MPMoviePlayerController 在 iOS4 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MPMoviePlayerController 上处理多个 SRT 文件
在 MPMoviePlayerController 上执行捏合手势时屏幕黑屏
在 UITableViewCell 中嵌入 MPMoviePlayerController
MPMoviePlayerController 在影片结尾更改控件样式