使用 UIScrollView 在两个菜单之间进行转换

Make transition between two Menus with UIScrollView

我想要 2 个菜单(另一个与屏幕截图中显示的相同,但包含其他项目)。

每个菜单都有自己的 UIStackView

我决定排除 UIPageViewController 而使用 UIScrollView 因为这是我想要的行为。

如何将两个菜单都放在 UIScrollView 中并制作出漂亮的动画?

您是否因为复杂性而避免使用 UIPageViewController?因为如果您使用 UIScrollView 的 pagingEnabled 属性

可以使用更简单的方法来完成相同的手势控制转换

根据我在屏幕截图中看到的...

var size                                      = CGSize()
    size.height                               = self.view.frame.height
    size.width                                = self.view.frame.width * 2

let scrollView                                = UIScrollView()
    scrollView.frame                          = self.view.frame
    scrollView.contentSize                    = size
    scrollView.pagingEnabled                  = true
    scrollView.showsHorizontalScrollIndicator = false

    nav.center.y                              = scrollView.frame.height / 2
    nav.center.x                              = scrollView.frame.width / 2
    nav2.center.y                             = scrollView.frame.height / 2
    nav2.center.x                             = nav.center.x  + scrollView.frame.width

    scrollView.addSubview(nav1)
    scrollView.addSubview(nav2)

self.view.addSubview(scrollView)

@dsieczko 在回答我的问题时做得非常出色。我对 AutoLayout 没有经验,所以这就是问题所在。我的最终代码如下所示:

    import UIKit

class MainMenuViewController: UIViewController, UIScrollViewDelegate {
    @IBOutlet var scrollView: UIScrollView!
    @IBOutlet var nav2: UIStackView!
    @IBOutlet var nav: UIStackView!
    @IBOutlet var pageControl: UIPageControl!

    override func viewDidLoad() {
        super.viewDidLoad()

        /* MAIN MENUS */
        var size                                      = CGSize()
        size.height                               = self.nav.frame.height
        size.width                                = self.view.frame.width * 2

        scrollView.frame                          = self.view.frame
        scrollView.contentSize                    = size
        scrollView.pagingEnabled                  = true
        scrollView.showsHorizontalScrollIndicator = false


        nav.center.y                              = scrollView.frame.height / 2
        nav.center.x                              = self.view.frame.width * 1.5
        nav2.center.y                             = scrollView.frame.height / 2
        nav2.center.x                             = nav.center.x  + scrollView.frame.width + 400

        scrollView.addSubview(nav)
        scrollView.addSubview(nav2)

        self.view.addSubview(scrollView)

        /* MAIN MENUS */

        // Change the Navigation Bar Color to Red
        navigationController!.navigationBar.barTintColor = UIColor(red: 0.79, green: 0.19, blue: 0.19, alpha: 1)

        // Change the Navigation Bar Font to Lato
        self.navigationController?.navigationBar.titleTextAttributes =
            [NSForegroundColorAttributeName: UIColor.whiteColor(),
                NSFontAttributeName: UIFont(name: "Lato-Semibold", size: 20)!]
    }

  }

我的布局类似于 this:

如果有人遇到这样的问题,我很乐意帮助我解决这个问题。