在我的代码中,在点击TopBar上的nextbutton和backButton时,不会调用playerPlayBackDidFinish。但是当完整播放视频文件时会调用它,如果有人知道请帮助...
我的代码如下。
#import "seq_nineViewController.h"
@implementation seq_nineViewController
@synthesize ninethVideoController, Bean;
@synthesize localBackFlag;
@synthesize goingNextButton, goingBackButton;
- (void) viewWillAppear:(BOOL)animated {
//[super viewWillAppear];
appDelegate = (wishstix_appAppDelegate *) [[UIApplication sharedApplication] delegate];
appDelegate.backFlag = 0;
self.localBackFlag = 0;
self.navigationController.navigationBarHidden = NO;
self.navigationItem.hidesBackButton = YES;
goingNextButton =[[UIBarButtonItem alloc] init];
goingNextButton.title=@"Next";
goingNextButton.target=self;
goingNextButton.action=@selector(nextAction);
self.navigationItem.rightBarButtonItem=goingNextButton;
[goingNextButton release];
goingBackButton =[[UIBarButtonItem alloc] init];
goingBackButton.title=@"Back";
goingBackButton.target=self;
goingBackButton.action=@selector(backAction);
self.navigationItem.leftBarButtonItem=goingBackButton;
[goingBackButton release];
NSEnumerator *AplicationEnumerator = [[appDelegate.categoryDictionary objectForKey:[appDelegate.categoryArray objectAtIndex:appDelegate.categoryRowId]] reverseObjectEnumerator];
NSArray *array = [AplicationEnumerator allObjects];
NSArray *arr = [[NSArray alloc] initWithArray:array];
self.Bean = [arr objectAtIndex:appDelegate.appLicationRowId];
MediaVideoPostUIBean *seq9_asset = [[[self.Bean aplicationFlow] arrayOfMediaVideoPostUI]objectAtIndex:2];
if ([[seq9_asset skip] isEqualToString:skipValueFalse]) {
NSMutableString *url = [[NSMutableString alloc] init];
[url appendString:[appDelegate.rootBean RootFileLocation]];
if (appDelegate.avatarFlag == 1)
[url appendString:[seq9_asset srcUrlMale]];
else if (appDelegate.avatarFlag == 2)
[url appendString:[seq9_asset srcUrlFemale]];
[appDelegate showActivityViewer];
self.ninethVideoController = [self getVideo:url];
if (self.ninethVideoController == nil) {
appDelegate.viewNumber = 15;
ControllerClass *temp = [[ControllerClass alloc] init];
[temp changeViewControllers];
} else {
self.goingNextButton.enabled = NO;
self.goingBackButton.enabled = NO;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(ninthMoviePlayerPlaybackDidFinish) name:MPMoviePlayerPlaybackDidFinishNotification object:nil]; // self.ninethVideoController];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(ninthPlayerLoadState) name:MPMoviePlayerLoadStateDidChangeNotification object:self.ninethVideoController];
[self.view addSubview:self.ninethVideoController.view];
[self.ninethVideoController play];
[url release];
}
}
else if ([[seq9_asset skip] isEqualToString:skipValueTrue]) {
appDelegate.viewNumber = 15;
ControllerClass *temp = [[ControllerClass alloc] init];
[temp changeViewControllers];
}
}
- (MPMoviePlayerController*)getVideo:(NSString *)url {
NSLog(@"Inside the getVideo of ninthMoviePlayer");
[url retain];
NSURL *fileURL = [NSURL URLWithString:url];
MPMoviePlayerController *moviePlayerController = [[[MPMoviePlayerController alloc] initWithContentURL:fileURL] autorelease];
if (([[UIDevice currentDevice] orientation] == UIInterfaceOrientationLandscapeRight) || ([[UIDevice currentDevice] orientation] == UIInterfaceOrientationLandscapeLeft))
moviePlayerController.view.frame = CGRectMake(0.0, 0.0, 480.0, 280.0);
else
moviePlayerController.view.frame = CGRectMake(0.0, -35.0, 320.0, 436.0);
[url release];
return moviePlayerController;
}
- (void) ninthMoviePlayerPlaybackDidFinish {
NSLog(@"Inside the ninthPlayerPlaybackDidFinish");
[self.ninethVideoController.view removeFromSuperview];
self.ninethVideoController = nil;
if (self.localBackFlag == 1) {
[self.navigationController popViewControllerAnimated:YES];
} else {
appDelegate.viewNumber = 15;
ControllerClass *control = [[ControllerClass alloc] init];
[control changeViewControllers];
}
}
- (void) ninthPlayerLoadState{
[appDelegate hideActivityViewer];
self.goingNextButton.enabled = YES;
self.goingBackButton.enabled = YES;
}
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if ((interfaceOrientation == UIInterfaceOrientationLandscapeRight) || (interfaceOrientation == UIInterfaceOrientationLandscapeLeft)) {
NSLog(@"enterd landscape");
[self.ninethVideoController.view removeFromSuperview];
self.ninethVideoController.view.frame = CGRectMake(0.0, 0.0, 480.0, 280.0);
[self.view addSubview:self.ninethVideoController.view];
} else if (interfaceOrientation == UIInterfaceOrientationPortrait) {
NSLog(@"entered portrait");
[self.ninethVideoController.view removeFromSuperview];
self.ninethVideoController.view.frame = CGRectMake(0.0, -35.0, 320.0, 436.0);
[self.view addSubview:self.ninethVideoController.view];
} else if (interfaceOrientation == UIDeviceOrientationPortraitUpsideDown) {
NSLog(@"entered PortraitUpsideDown");
[self.ninethVideoController.view removeFromSuperview];
self.ninethVideoController.view.frame = CGRectMake(0.0, -20.0, 320.0, 436.0);
[self.view addSubview:self.ninethVideoController.view];
}
return (YES);
}
- (IBAction) nextAction {
NSLog(@"Inside the nextAction of ninthVideoPlayer");
appDelegate.backFlag = 0;
self.localBackFlag = 0;
[self.ninethVideoController stop];
NSLog(@"After executing stop statememt");
//[self ninthPlayerPlaybackDidFinish];
}
- (IBAction) backAction {
NSLog(@"Inside the backAction of ninthVideoPlayer");
appDelegate.backFlag = 1;
self.localBackFlag = 1;
//[self.ninethVideoController pause];
[self.ninethVideoController stop];
//[self ninthPlayerPlaybackDidFinish];
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)dealloc {
[super dealloc];
self.ninethVideoController = nil;
}
@end
答案 0 :(得分:4)
你读过这个吗?
MPMoviePlayerPlaybackDidFinishNotification
通知观察者该电影 玩完了。受影响的电影 玩家存储在对象中 通知的参数。该 userInfo字典 通知包含 MPMoviePlayerPlaybackDidFinishReasonUserInfoKey 键,表示原因 播放完毕。这个通知 播放失败时也会发送 因为错误。
在案件中不发送此通知 电影播放器正在显示的位置 在全屏模式下,用户点按 完成按钮。在那种情况下, 完成按钮可以播放电影 播放器转出时暂停 全屏模式。如果你想 您可以在代码中检测到这种情况 应监控其他通知 如 MPMoviePlayerDidExitFullscreenNotification。
确保您没有做任何未发送此通知的内容
答案 1 :(得分:1)
<强>观察强>
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(movieDidExitFullscreen:)
name:MPMoviePlayerDidExitFullscreenNotification
object:nil];
并添加操作
- (IBAction) movieDidExitFullscreen:(NSNotification*)notification
{
NSLog(@"movieDidExitFullscreen");
[self.moviePlayer stop];
[self.moviePlayer setFullscreen:NO animated:NO];
[self.moviePlayer.view removeFromSuperview];
}