首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >电影结束后的MPMoviePlayerViewController问题

电影结束后的MPMoviePlayerViewController问题
EN

Stack Overflow用户
提问于 2010-07-23 00:08:00
回答 5查看 3.1K关注 0票数 3

在iPhone 4/3GS的iOS4中,我有一个表视图,其中一个单元格播放了一个电影文件。如果影片播放完毕,并且控件消失,视图将回到状态栏下。就像在这个image...that中,我太新了,不能发帖。看这里..。

http://www.dezignwright.com/ios4_movie.png

如果在影片结束时控制处于打开状态,则不会出现问题。

奖励:当电影播放器开始播放时,我如何强制它进入景观。我根本不想让它出现在肖像里。

谢谢。

EN

回答 5

Stack Overflow用户

发布于 2011-04-21 08:06:02

@Nuoji已经接近正确答案了。当MPMoviePlayerViewController关闭时,iOS正在对有问题的视图的帧进行动画处理。由于iOS中的一个错误,当回放自动结束时(当电影结束时),动画假定所讨论的视图占据了整个屏幕,而不是全屏。

步骤1.保存包含将启动MPMoviePlayerViewController的视图的superview的帧。

步骤2.为playbackDidFinishNotification附加监听程序

代码语言:javascript
复制
[[NSNotificationCenter defaultCenter] addObserver:self 
                                  selector:@selector(playbackDidFinish:)
                                      name:MPMoviePlayerPlaybackDidFinishNotification 
                                   object:nil];

步骤3.在通知处理程序中,将帧重置为原始帧,但会延迟一段时间,以允许动画完成。如果在动画过程中修改了帧,则不会产生任何效果。

代码语言:javascript
复制
[self performSelector:@selector(resetFrame)
           withObject:nil 
           afterDelay:kResetFrameDelay];

- (void)resetFrame {
    self.view.frame = kApplicationFrame;
}
票数 1
EN

Stack Overflow用户

发布于 2011-04-21 20:25:53

此问题已得到解决,从iOS 4.3开始不再是问题。

感谢大家的投入。

票数 1
EN

Stack Overflow用户

发布于 2010-07-28 20:15:14

这似乎是4.0中的一个错误,当使用“完成”按钮退出时,它可以正常工作。

我使用的解决方法是手动存储帧,然后在接收MPMoviePlayerPlaybackDidFinishNotification时恢复它。

最后,要使其处于横向模式,请使用覆盖shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientationMPMoviePlayerViewController的子类

例如,类似于以下内容:

代码语言:javascript
复制
@interface CustomMoviePlayerViewController : MPMoviePlayerViewController
@end
@implementation CustomMoviePlayerViewController
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    return toInterfaceOrientation == UIInterfaceOrientationLandscapeRight || toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft;
}
@end

并在你的控制器中解决这个bug:

代码语言:javascript
复制
- (void)playbackEnded:(NSNotification *)notification
{
    [[self view] setFrame:[self originalFrame]];
}

- (void)playMovie:(NSString *)movieURLString
{
    MPMoviePlayerViewController *controller = [[CustomMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:movieURLString]];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackEnded:) name:MPMoviePlayerPlaybackDidFinishNotification object:[controller moviePlayer]];
    [self presentMoviePlayerViewControllerAnimated:controller];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3310909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档