【问题标题】:MPMoviePlayerController keeps playing after view did unload?视图卸载后 MPMoviePlayerController 继续播放?
【发布时间】:2011-09-12 05:58:23
【问题描述】:

我有一个详细视图,当 viewdidload 在 detailviewcontroller 中时,MPMoviePlayerController 分配并播放音频,但即使我导航回主表,音频仍在播放。

当我导航回主表时如何停止 MPMovieplayercontroller?这是我的 MPMoviePlayerController 代码:

.h

MPMoviePlayerController *player;

.m

- (void)viewDidLoad
{
[super viewDidLoad];
//Get the Movie
NSURL *movieURL = [NSURL URLWithString:@"some link"];
player = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];

//Place it in subview, else it won’t work
player.view.frame = CGRectMake(20, 20, 280, 25);
player.backgroundView.backgroundColor = [UIColor clearColor];
[self.view addSubview:player.view];

// Play the movie.
[player play];

}

我什至在 viewdidunload 方法中添加了以下代码,但没有用。

- (void)viewDidUnload {

[player stop];
player.initialPlaybackTime = -1;
[player release];

// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}

你们有什么建议?

提前致谢,

【问题讨论】:

  • 尝试使用 viewWillDisappear 而不是 viewDidUnload。还要从其父视图中删除 MPVideoPlayerController.view。
  • 如何从superview中移除玩家?
  • [player.view removeFromSuperview];
  • viewWillDisappear 方法工作正常,但我没有从其超级视图中删除播放器。 viewDidUnload 时我应该删除它吗?

标签: mpmovieplayercontroller mpmovieplayer


【解决方案1】:

相比 viewWillDisappear,我更喜欢 viewDidDisappear 的用户体验。动画开始,然后电影停止 - 这样音频对我来说流动性更好。

-(void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    [_moviePlayer stop];
}

【讨论】:

  • 小心,因为当您将电影播放器​​置于全屏模式时(也可能在其他不需要的场景中),它会被调用
【解决方案2】:

我也有类似的问题。我无法使用“viewDidDisappear”或“viewWillDisappear”,因为我有一个“config”类型的视图,可以在播放内容时打开,它会触发这两种方法。

编辑:发现 viewDidUnload 和 viewWillUnload 不再被调用(我目前在 iOS 6+ 设备上)...

来自文档:

可用性:iOS(3.0 及更高版本)已弃用:视图不再 在内存不足的情况下清除,因此永远不会调用此方法。

我刚刚创建了一个名为 unload 的简单函数,并在函数内部将我需要的任何对象设置为 = nil(我使用的是 ARC)。在我调用删除视图时,我也调用了卸载函数。希望它可以帮助某人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-19
    • 2023-03-13
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 2013-05-23
    相关资源
    最近更新 更多