如何在 UIPageViewController 后面添加背景视频视图?
How to add a background video view behind a UIPageViewController?
我有一个登录流程,其中有一段视频在后台播放,固定视频上方有几页文字,最后一页是登录表单。
我已经成功构建了页面滚动,但是每个页面都有自己的背景,我有点迷失了如何使用 bg 上的循环视频和水平滚动的透明页面固定视图最重要的是。
更新
我的故事板是这样的:
我的 BootViewController 正在实现页面处理程序。
import UIKit
class BootViewController: UIPageViewController, UIPageViewControllerDataSource {
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
dataSource = self
setViewControllers([UIStoryboard(name: "Boot", bundle: nil).instantiateViewController(withIdentifier: pages[0])], direction: .forward, animated: true, completion: nil)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
let pages = [
"IntroPageOne",
"IntroPageTwo",
"LoginController"
]
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
let currentViewControllerIdentifier = viewController.restorationIdentifier
var previousViewController = pages.index(of: currentViewControllerIdentifier!)! - 1
if previousViewController < 0 {
previousViewController = pages.count - 1
}
let previousViewControllerIdentifier = pages[previousViewController]
return UIStoryboard(name: "Boot", bundle: nil).instantiateViewController(withIdentifier: previousViewControllerIdentifier)
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
let currentViewControllerIdentifier = viewController.restorationIdentifier
var nextViewController = pages.index(of: currentViewControllerIdentifier!)! + 1
if nextViewController < 0 {
nextViewController = 0
}
if nextViewController >= pages.count {
nextViewController = 0
}
let nextViewControllerIdentifier = pages[nextViewController]
return UIStoryboard(name: "Boot", bundle: nil).instantiateViewController(withIdentifier: nextViewControllerIdentifier)
}
}
我不知道如何创建子视图并将 (link) 添加到我的 bootController。
您刚刚尝试了以下设置吗?
UIViewController.view
- backgroundVideoView
- pageViewController.view
- page1
- page2
...
在此,您在 view.subviews
中添加一个背景视频视图作为底部视图,然后在其上方添加一个 view
的 pageViewController。您只需要设置 pageViewController.view.backgroundColor = UIColor.clear
和 page1.view.backgroundColor = UIColor.clear
等,以确保背景可见。
更新
在你的情况下,也许这样就可以了:
class BackgroundViewController: UIViewController {
fileprivate var pageViewController: BootViewController!
override func viewDidLoad() {
super.viewDidLoad()
// configure here anything with the video that you have to configure
pageViewController = UIStoryboard(name: "Boot", bundle: nil).instantiateViewController(withIdentifier: "BootViewController") as! BootViewController
self.view.addSubview(pageViewController.view)
// set the frame, or use autolayout.. I will set the frame directly since it's easier here
pageViewController.view.frame = self.view.frame
}
}
没有"backgroundView"的UIPageViewController
。要获得类似的东西,您将使用不同的视图控制器,您可以在其中包含 UIPageViewController
的视图。然后这个父视图控制器可以成为背景,页面控制器成为前景(因为它被添加为 viewController 的最顶层子视图)。
我有一个登录流程,其中有一段视频在后台播放,固定视频上方有几页文字,最后一页是登录表单。
我已经成功构建了页面滚动,但是每个页面都有自己的背景,我有点迷失了如何使用 bg 上的循环视频和水平滚动的透明页面固定视图最重要的是。
更新
我的故事板是这样的:
import UIKit
class BootViewController: UIPageViewController, UIPageViewControllerDataSource {
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
dataSource = self
setViewControllers([UIStoryboard(name: "Boot", bundle: nil).instantiateViewController(withIdentifier: pages[0])], direction: .forward, animated: true, completion: nil)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
let pages = [
"IntroPageOne",
"IntroPageTwo",
"LoginController"
]
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
let currentViewControllerIdentifier = viewController.restorationIdentifier
var previousViewController = pages.index(of: currentViewControllerIdentifier!)! - 1
if previousViewController < 0 {
previousViewController = pages.count - 1
}
let previousViewControllerIdentifier = pages[previousViewController]
return UIStoryboard(name: "Boot", bundle: nil).instantiateViewController(withIdentifier: previousViewControllerIdentifier)
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
let currentViewControllerIdentifier = viewController.restorationIdentifier
var nextViewController = pages.index(of: currentViewControllerIdentifier!)! + 1
if nextViewController < 0 {
nextViewController = 0
}
if nextViewController >= pages.count {
nextViewController = 0
}
let nextViewControllerIdentifier = pages[nextViewController]
return UIStoryboard(name: "Boot", bundle: nil).instantiateViewController(withIdentifier: nextViewControllerIdentifier)
}
}
我不知道如何创建子视图并将 (link) 添加到我的 bootController。
您刚刚尝试了以下设置吗?
UIViewController.view - backgroundVideoView - pageViewController.view - page1 - page2 ...
在此,您在 view.subviews
中添加一个背景视频视图作为底部视图,然后在其上方添加一个 view
的 pageViewController。您只需要设置 pageViewController.view.backgroundColor = UIColor.clear
和 page1.view.backgroundColor = UIColor.clear
等,以确保背景可见。
更新
在你的情况下,也许这样就可以了:
class BackgroundViewController: UIViewController {
fileprivate var pageViewController: BootViewController!
override func viewDidLoad() {
super.viewDidLoad()
// configure here anything with the video that you have to configure
pageViewController = UIStoryboard(name: "Boot", bundle: nil).instantiateViewController(withIdentifier: "BootViewController") as! BootViewController
self.view.addSubview(pageViewController.view)
// set the frame, or use autolayout.. I will set the frame directly since it's easier here
pageViewController.view.frame = self.view.frame
}
}
没有"backgroundView"的UIPageViewController
。要获得类似的东西,您将使用不同的视图控制器,您可以在其中包含 UIPageViewController
的视图。然后这个父视图控制器可以成为背景,页面控制器成为前景(因为它被添加为 viewController 的最顶层子视图)。