使用 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:
如果有人遇到这样的问题,我很乐意帮助我解决这个问题。
我想要 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:
如果有人遇到这样的问题,我很乐意帮助我解决这个问题。