1

iOS应用崩溃我已经在这个问题(link),但描述了同样的问题在我的情况我使用AVPlayerViewController代替MPMoviePlayerController,所以我试图以应用答案,但AVPlayer的相同的逻辑只有未知,readyToPlay和失败状态,我无法知道控制器什么时候关闭。如何知道何时AVPlayerViewController已关闭,或者如何解决导致同一碰撞的问题?当谈到返回到之前的UIViewController

我的ViewController定位方法:

override var shouldAutorotate : Bool { 
    return false 
} 

override var supportedInterfaceOrientations : UIInterfaceOrientationMask { 
    return UIInterfaceOrientationMask.portrait 
} 

这是打开的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() 
    }) 
} 

UPDATE:

崩溃日志:

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

我觉得你还没有采取从currentviewcontroller disappering采取玩家。我想当你回到以前的viewcontroller停止播放器。 –

+0

@AshokLondhe崩溃说:致命的例外:UIApplicationInvalidInterfaceOrientation作为我连接的问题 – Roran

+0

你没有mentinoded问题,请检查你的问题也在链接我似乎没有。 –

回答

0

最佳解决方案是创建新的UIWindow并将AVPlayerViewController设置为rootViewController并为新窗口配置方向。
当应用程序仅用于肖像时,我使用此解决方案用于具有横向和纵向方向的图像库。
例子:

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

但是,你需要关闭后AVPlayerViewController设置modalWindow.hidden = yes并呼吁makeKeyAndVisible的一个窗口。

我用#import <objc/runtime.h>替代presentViewController:animated:completion:dismissViewControllerAnimated:completion:,在我的方法中,我实现了显示/解除新窗口的逻辑。

如果您需要更多示例或解释,请告诉我。 谢谢

+1

夫特3: '让modalWindow =一个UIWindow(帧:UIScreen.main.bounds) modalWindow.tag = kWindowTag modalWindow.rootViewController = <播放机VC> modalWindow.makeKeyAndVisible()' –

+0

我尝试这样的代码,但什么是显示 – Roran

+1

明天我会给你完整的例子。 –