我有一个带有三个标签的标签栏应用程序(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
}
就其本身而言,这非常有效。问题发生在以后。任何选项卡都可以转到我有一个JWPlayer for iOS实例的屏幕,它占据了屏幕的前三分之一。如果视频开始播放并且我将手机旋转到横向模式,则视频将显示为fullScreen(如果用户单击fullScreen按钮,也会发生这种情况)。但是,当设备旋转回纵向时,我会立即看到初始视图(即第一个选项卡的内容),而不是使用前三分之一的视频播放器返回屏幕。视频继续在后台播放,但我看不到它。除非我再次将设备旋转到横向模式,否则我无法返回视频。所以,横向我看到我原来的视频,肖像我得到了初始视图(第一个标签)。
我尝试了很多东西,例如一次删除一个代码块,监视viewDidDisappear,viewWillDisappear(用于视频屏幕),当手机旋转到肖像时,都没有触发。我还监控了初始标签是否以某种方式被选中,但情况也不是这样。
只有当我从app delegate中删除了新手代码时,视频播放器才能正常工作。
入门代码中是否有任何内容可以让视频播放器在退出fullScreen时显示initialViewController?我可以用不同的方式编写入职代码吗?
感谢。
答案 0 :(得分:1)
这就是我所做的。我必须使用自己的ViewController将入门屏幕视为其他任何屏幕。然后在ViewController里面我写道:
$objResp=json_decode($response, true);
不幸的是,别无他法。