【发布时间】:2017-07-03 01:40:40
【问题描述】:
我有一个带有三个选项卡的选项卡栏应用程序(Swift 3、Xcode 8.3)。首次启动应用程序时,代码会检查 UserDefaults 以查看是否有用户登录。如果有用户,则加载初始视图控制器(第一个选项卡)。否则,会加载一个引导屏幕供用户登录,之后他/她将进入第一个选项卡。
这是我在 AppDelegate 中使用的代码:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Set up onboarding screen
self.window = UIWindow(frame: UIScreen.main.bounds)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
var vc: UIViewController
let isUserLoggedIn = UserDefaults.standard.bool(forKey: "isUserLoggedIn")
if !isUserLoggedIn {
vc = storyboard.instantiateViewController(withIdentifier: "onboarding")
} else {
vc = storyboard.instantiateInitialViewController()!
}
self.window?.rootViewController = vc
self.window?.makeKeyAndVisible()
return true
}
就其本身而言,这非常有效。问题稍后出现。任何选项卡都可以转到一个屏幕,其中我有一个适用于 iOS 的 JWPlayer 实例,它占据了屏幕的顶部三分之一。如果视频开始播放并且我将手机旋转到横向模式,视频将变为全屏(如果用户单击全屏按钮也会发生这种情况)。但是,当设备旋转回纵向时,我并没有回到顶部三分之一的视频播放器的屏幕,而是立即看到初始视图(即第一个选项卡的内容)。视频一直在后台播放,但我看不到。除非我再次将设备旋转到横向模式,否则我无法返回视频。所以,横向我看到我的原始视频,纵向我得到初始视图(第一个标签)。
我尝试了很多事情,例如一次删除一个代码块,监控viewDidDisappear,viewWillDisappear(用于视频屏幕),当手机旋转到纵向时,这些都没有触发。我还监视是否以某种方式选择了初始选项卡,但事实并非如此。
只有当我从应用代理中删除了入职代码时,视频播放器才能正常工作。
入职代码中是否有任何内容可以使视频播放器在退出全屏时显示 initialViewController?有没有其他方法可以编写入职代码?
谢谢。
【问题讨论】:
-
嗨 cesarcarlos 我也面临同样的问题。你能帮我解决这个问题吗?我需要做什么?
-
不幸的是,我永远无法让它工作,所以我不得不删除入职。我为入职屏幕创建了一个视图控制器,而不是在应用程序委托中进行。
-
谢谢 cesarcarlos
-
实际上我有一个初始视图控制器,并在其上使用 JWPlayer 呈现另一个视图控制器,并且在将横向旋转为纵向时面临关闭视图控制器的问题。
标签: ios swift video jwplayer screen-rotation