1

J'ai le même problème décrit dans cette question (link), mais dans mon cas je l'utilise à la place AVPlayerViewControllerMPMoviePlayerController, alors j'ai essayé d'appliquer la même logique de la réponse, mais AVPlayer a seulement unknow, readyToPlay et l'état échoué et je ne peux pas savoir quand le contrôleur est fermé.Comment puis-je savoir quand le AVPlayerViewController est fermé ou comment puis-je résolu le même accident causé par l'orientation?iOS App accident quand il revient à UIViewController précédente

mes méthodes d'orientation viewController:

override var shouldAutorotate : Bool { 
    return false 
} 

override var supportedInterfaceOrientations : UIInterfaceOrientationMask { 
    return UIInterfaceOrientationMask.portrait 
} 

c'est la méthode qui ouvre la AVPlayerViewController:

func playVideo(at videoUrl: URL) { 
    let controller = AVPlayerViewController() 
    controller.player = AVPlayer(playerItem: AVPlayerItem(url: videoUrl)) 
    self.present(controller, animated: true, completion: { 
     controller.player?.play() 
    }) 
} 

MISE À JOUR:

journal Crash:

Fatal Exception: UIApplicationInvalidInterfaceOrientation 
0 CoreFoundation     0x183dc2fe0 __exceptionPreprocess 
1 libobjc.A.dylib    0x182824538 objc_exception_throw 
2 CoreFoundation     0x183dc2f28 -[NSException initWithCoder:] 
3 UIKit       0x189fe7f78 -[UIViewController _preferredInterfaceOrientationForPresentationInWindow:fromInterfaceOrientation:] 
4 UIKit       0x18a8c5b68 -[_UIFullscreenPresentationController _adjustOrientationIfNecessaryInWindow:forViewController:preservingViewController:] 
5 UIKit       0x18a2421a4 -[UIPresentationController _dismissWithAnimationController:interactionController:target:didEndSelector:] 
6 UIKit       0x18a2689a4 -[UIViewController _dismissViewControllerWithAnimationController:interactionController:completion:] 
7 UIKit       0x18a01dc04 -[UIViewController _dismissViewControllerWithTransition:from:completion:] 
8 UIKit       0x189fc5a98 -[UIViewController dismissViewControllerWithTransition:completion:] 
9 UIKit       0x18a267c4c -[UIViewController _performCoordinatedPresentOrDismiss:animated:] 
10 UIKit       0x189fc55ec -[UIViewController dismissViewControllerAnimated:completion:] 
11 AVKit       0x191667f28 -[AVPlayerViewController(AVPlaybackControlsViewControllerActions) doneButtonTapped:] 
12 AVKit       0x19168d614 -[AVPlaybackControlsViewController doneButtonTapped:] 
13 UIKit       0x189f29010 -[UIApplication sendAction:to:from:forEvent:] 
14 UIKit       0x189f28f90 -[UIControl sendAction:to:forEvent:] 
15 UIKit       0x189f13504 -[UIControl _sendActionsForEvents:withEvent:] 
16 UIKit       0x189f28874 -[UIControl touchesEnded:withEvent:] 
17 UIKit       0x189f28390 -[UIWindow _sendTouchesForEvent:] 
18 UIKit       0x189f23728 -[UIWindow sendEvent:] 
19 UIKit       0x189ef433c -[UIApplication sendEvent:] 
20 UIKit       0x18a6ee014 __dispatchPreprocessedEventFromEventQueue 
21 UIKit       0x18a6e8770 __handleEventQueue 
22 UIKit       0x18a6e8b9c __handleHIDEventFetcherDrain 
23 CoreFoundation     0x183d7142c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ 
24 CoreFoundation     0x183d70d9c __CFRunLoopDoSources0 
25 CoreFoundation     0x183d6e9a8 __CFRunLoopRun 
26 CoreFoundation     0x183c9eda4 CFRunLoopRunSpecific 
27 GraphicsServices    0x185708074 GSEventRunModal 
28 UIKit       0x189f59058 UIApplicationMain 
29 selftv       0x10006c124 main (AppDelegate.swift:15) 
30 libdyld.dylib     0x182cad59c start 
+0

Je pense que vous n'avez pas arrêté lecteur tout en disparaissant de currentviewcontroller. Je pense que lorsque vous revenez au contrôleur précédent, arrêtez le lecteur. –

+0

@AshokLondhe l'accident dit: Exception fatale: UIApplicationInvalidInterfaceOrientation comme la question que j'ai liée – Roran

+0

Que vous n'avez pas mentinoded dans Question s'il vous plaît vérifier votre question aussi dans le lien que je ne l'ai pas l'air. –

Répondre

0

La meilleure solution est de créer un nouveau UIWindow et de définir AVPlayerViewController comme rootViewController et de configurer les orientations pour une nouvelle fenêtre.
J'ai utilisé cette solution pour la galerie d'images avec des orientations paysage et portrait lorsque l'application est utilisée uniquement portrait.
Exemple:

UIWindow *modalWindow = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 
modalWindow.tag = kWindowTag; 
modalWindow.rootViewController = <your player vc>; 
[modalWindow makeKeyAndVisible]; 

Mais vous avez besoin après la fermeture AVPlayerViewController mis modalWindow.hidden = yes et pour appeler makeKeyAndVisible fenêtre précédente.

J'ai utilisé #import <objc/runtime.h> pour surcharger presentViewController:animated:completion: et dismissViewControllerAnimated:completion: et dans mes méthodes j'ai implémenté la logique pour montrer/ignorer une nouvelle fenêtre.

Si vous avez besoin de plus d'exemples ou d'explications, s'il vous plaît faites le moi savoir. Merci

+1

Swift 3: 'let = UIWindow fenêtre modale (cadre: UIScreen.main.bounds) modalWindow.tag = kWindowTag modalWindow.rootViewController = modalWindow.makeKeyAndVisible()' –

+0

J'ai essayé ce code, mais tout est montré – Roran

+1

Je vais vous envoyer un exemple complet demain. –