我正在努力实现以下设计,其中四个不同的视图控制器将背靠背堆叠。参考图片如下 -
每个视图控制器将动态地具有包含不同数据的表视图。可以通过从右侧滑动来切换视图控制器。
我知道UIPageViewController适合这种分页方法。 但是,我担心这种堆叠页面视图是否可以实现?
我还没有开始任何事情,我需要一些想法才能开始。首先,是否可以这样做?
如果不够清楚,请告诉我。感谢。
答案 0 :(得分:1)
根据我的评论中的建议,您可以创建一个容器视图控制器,您可以在其中添加子视图控制器。你如何展示和删除它们取决于你。我添加了一个滑动手势以逐个从childViewControllers
数组中删除它们,但您可以详细说明动画等。以下是示例:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let swipeGesturRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(didSwipe))
swipeGesturRecognizer.direction = .left
view.addGestureRecognizer(swipeGesturRecognizer)
var index = 0
let amount = 5
while index < amount {
let childViewController = UIViewController()
childViewController.view
.translatesAutoresizingMaskIntoConstraints = true
let hue = 1.0 / CGFloat(index)
childViewController.view.backgroundColor = UIColor(hue: hue, saturation: 0.5, brightness: 0.5, alpha: 1)
childViewController.view.frame = self.view.bounds.insetBy(dx: CGFloat(amount - index) * 10, dy: 80.0).offsetBy(dx: 0.0, dy: -CGFloat(amount - index) * 10.0)
childViewController.view.layer.borderColor = UIColor.blue.cgColor
childViewController.view.layer.borderWidth = 1.0
self.view.addSubview(childViewController.view)
self.addChildViewController(childViewController)
childViewController.didMove(toParentViewController: self)
index += 1
}
}
// Removes child view controlelrs one by one when swiped left
@objc func didSwipe() {
guard let childViewController = childViewControllers.last else {
return
}
childViewController.willMove(toParentViewController: nil)
childViewController.view.removeFromSuperview()
childViewController.removeFromParentViewController()
}
}