iOS Swift:如何实现用户界面等堆栈卡?

时间:2017-10-25 07:15:53

标签: ios swift swift4

我正在努力实现以下设计,其中四个不同的视图控制器将背靠背堆叠。参考图片如下 -

enter image description here

每个视图控制器将动态地具有包含不同数据的表视图。可以通过从右侧滑动来切换视图控制器。

我知道UIPageViewController适合这种分页方法。 但是,我担心这种堆叠页面视图是否可以实现?

我还没有开始任何事情,我需要一些想法才能开始。首先,是否可以这样做?

如果不够清楚,请告诉我。感谢。

1 个答案:

答案 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()
    }
}