Iphone iOS多视图和MPMoviePlayer问题
我有两个视图控制器,一个是主控制器,另一个是movieController 使用Iphone iOS多视图和MPMoviePlayer问题,iphone,ios,ipad,ios4,Iphone,Ios,Ipad,Ios4,我有两个视图控制器,一个是主控制器,另一个是movieController 使用[self.view removeFromSuperview]从movieController滑回主控制器后在movieController中播放的视频仍作为背景声音播放 我确实发布了播放器,但不知道 @synthesize viewForMovie,player; - (void)viewDidLoad { [super viewDidLoad]; //background image se
[self.view removeFromSuperview]从movieController滑回主控制器后代码>在movieController中播放的视频仍作为背景声音播放
我确实发布了播放器,但不知道
@synthesize viewForMovie,player;
- (void)viewDidLoad {
[super viewDidLoad];
//background image
self.view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"mits_bg.png"]];
//gesture recognizer -to up
UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc]
initWithTarget:self
action:@selector(handleSwipes:)];
swipeGesture.direction = UISwipeGestureRecognizerDirectionDown;
[self.view addGestureRecognizer:swipeGesture];
[swipeGesture release];
//movie player
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(movieDurationAvailable:)
name:MPMovieDurationAvailableNotification
object:nil];
**self.player = [[[MPMoviePlayerController alloc] init] autorelease];**
//self.player.controlStyle = MPMovieControlStyleNone; // no control at all :)
self.player.contentURL = [self movieURL];
self.player.view.frame = self.viewForMovie.bounds;
self.player.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight ;
[self.viewForMovie addSubview:player.view];
[self.player play];
}
//---gesture recognizer
- (IBAction) handleSwipes:(UIGestureRecognizer *) sender {
UISwipeGestureRecognizerDirection direction = [(UISwipeGestureRecognizer *) sender direction];
if (direction == UISwipeGestureRecognizerDirectionDown) {
CATransition *transition = [CATransition animation];
transition.duration = 0.75;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromBottom;
transition.delegate = self;
// Next add it to the containerView's layer. This will perform the transition based on how we change its contents.
[self.view.superview.layer addAnimation:transition forKey:nil];
[self.view removeFromSuperview];
**self.player = nil;**
//[player release]; // I give it a try like this also
}
}
- (void)viewDidUnload {
[super viewDidUnload];
self.viewForMovie = nil;
self.player = nil;
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)dealloc {
[thumbnailScrollView release];
[viewForMovie release];
[onScreenDisplayLabel release];
[player release];
[super dealloc];
}
当你这样做的时候,你会保留两次
self.player = [[MPMoviePlayerController alloc] init];
您应该在此添加一条autorelease
消息
self.player = [[[MPMoviePlayerController alloc] init] autorelease];
除了在viewDidUnload
和dealoc
中,我没有看到调用的发行版。从superview中删除视图后,应立即调用它nil
ing是一个更好的选择,因为dealloc
中的释放调用将启用nil
而不是一个解除分配的对象。因此,在从视图中删除它之后,将其设置为nil
,如下所示
self.player = nil;
谢谢你的回答。我试过这些台词,但都不行。我甚至在[self.view removeFromSuperview]之前写了发布行;但是仍然不起作用。@tugce你能用你最新的代码更新这个吗,这样我就可以看到什么不起作用了?你能添加[self.player stop]吗;[self.player.view从SuperView移除]代码>执行前self.player=nil代码>。它看起来像是self.viewForMovie
可能会保留该视图,但这应该会产生其他影响。好的,这会使其他视图中的声音静音;但是回到电影视图会使应用程序崩溃?你可能应该移动**self.player=[[[MPMoviePlayerController alloc]init]autorelease];**//self.player.controlStyle=MPMovieControlStyleNone;//完全没有控件:)self.player.contentURL=[self movieURL];self.player.view.frame=self.viewForMovie.bounds;self.player.view.autoresizingMask=uiviewsautoresizingflexiblewidth | uiviewsautoresizingflexiblewhight;[self.viewForMovie addSubview:player.view];[self.player play]代码>到视图将显示:
,因为您每次来到视图时都需要它显示。@Deepak我用相关的代码块进行了编辑。在从movieController向上滑动到mainController后,如果我向下滑动回到movieController应用程序崩溃,我意识到了另一件事。我确实在任何地方发布了这个播放器,我认为它可能会工作,但不知道为什么不行。