Приостановить видео после приложенияWillResignActive и воспроизвести после примененияDidBecomeActive

Хорошо, мой код воспроизводит фильм в полноэкранном режиме без каких-либо элементов управления для пользователя (в основном кинематографический). После того, как фильм закончен, мой NSNotification срабатывает и загружает представление.

Однако, когда пользователь нажимает кнопку «Домой» во время одного из этих фильмов, он приостанавливается, но нет никакого способа заставить его снова воспроизводиться, так как я убрал элементы управления. Я попытался поместить [playerController play] и [playerController shouldAutoplay] в свой AppDelegate.m в разделе applicationDidBecomeActive, но он там не определен, поэтому не знает, что такое playerController.

Может ли кто-нибудь помочь мне правильно приостановить и воспроизвести это видео, если пользователь получит текст или нажмет кнопку «Домой»?

-(IBAction)playMovie:(id)sender {
NSString *movieUrl = [[NSBundle mainBundle] pathForResource:@"Initiate" ofType:@"m4v"]; playerController = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:movieUrl]];

[playerController.view setFrame: self.view.bounds];    
[self.view addSubview:playerController.view];
playerController.controlStyle = MPMovieControlStyleNone;
[playerController shouldAutoplay];
[playerController play];


[[NSNotificationCenter defaultCenter] addObserver:self
                                           selector:@selector(playbackFinished:) 
                                           name:MPMoviePlayerPlaybackDidFinishNotification
                                           object:playerController];
}
- (void)playbackFinished:(NSNotification*) notification {
 playerController = [notification object];
 [[NSNotificationCenter defaultCenter] 
 removeObserver:self
 name:MPMoviePlayerPlaybackDidFinishNotification
 object:playerController];


ViewController *viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
viewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentModalViewController:viewController animated:YES];

ИЗМЕНИТЬ:

Заголовок

//ViewController.h

@interface ViewController : UIViewController {
MPMoviePlayerController *playerController;
}

Выполнение

//ViewController.m
playerController = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:movieUrl]];

    AppDelegate *sharedAppDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    sharedAppDelegate.pointer = playerController;

person Sam    schedule 23.11.2011    source источник


Ответы (1)


при реализации вашего плеера отправьте все необходимые указатели делегату приложения:

AppDelegate *sharedAppDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
sharedAppDelegate.yourPointer = yourPlayer;

используйте этот метод из appDelegate.m:

- (void)applicationWillResignActive:(UIApplication *)application
{
    /*
     Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
     Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
     */
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    /*
     Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
     */
}
person SentineL    schedule 23.11.2011
comment
Как сделать ссылку в файле заголовка App Delegate? - person Sam; 30.11.2011
comment
Я имею в виду указатель. точно так же, как вы сделали это в своем контроллере представления, где ваш плеер инициировался, но вам не нужно инициировать его в AppDelegate - person SentineL; 30.11.2011
comment
Я очень новичок в программировании и не знаю, как это реализовать. Я не знаю, что добавить в AppDelegate.h/m. Я отправил указатели на AppDelegate в своем Viewcontroller.m. - person Sam; 30.11.2011
comment
Хорошо, я отредактировал свой пост, чтобы показать мой ViewController.h/m. Теперь я не уверен, что добавить в мой AppDelegate, чтобы он делал что-то вроде [playerController stop]; - person Sam; 30.11.2011
comment
добавить MPMoviePlayerController *playerController; к AppDelegate.h. Затем в вашем ViewController, сразу после запуска MoviePlayerController: sharedAppDelegate.playerController = self.playerController;. Тогда делай, как я грустно отвечаю. - person SentineL; 30.11.2011
comment
давайте продолжим обсуждение в чате - person Sam; 30.11.2011