在Swift中使用UIScrollView将滑出菜单添加到TabBarController

时间:2018-11-13 20:25:05

标签: ios swift uiscrollview uitabbarcontroller slide

我有一个完全用代码编写的应用程序,所以没有故事板,它将AppDelegate中的rootViewController设置为TabBarController。这是UITabBarController的自定义类,用于设置所有视图,在其中添加相应的ViewController,并为每个ViewController设置一个NavigationController。

// didFinishLaunchingWithOptions
window = UIWindow(frame: UIScreen.main.bounds)
window?.makeKeyAndVisible()

let MainScreen = TabBarController()
self.window?.rootViewController = MainScreen

现在,这一切正常,但是我想从左侧添加一个滑出菜单以显示几个设置。我想要左侧主屏幕上(NavigationController内部)的按钮,当我单击它时,我希望菜单滑入,将当前的ViewController相应地推向右侧。一个很好的例子是,当您单击Twitter提要的左上方的个人头像时。

我考虑了几种实现此目的的方法,在网上阅读了很多,并看到了一些示例,这些示例经常使用第三方插件或情节提要,这是我所不希望的。其他示例似乎可以使用,但不能使用TabBarController。

我想使用UIScrollView来实现此目的,方法是将contentSize设置为UIScreen宽度的1.5倍,打开应用时将其启动为屏幕宽度的一半的x值,从而显示ViewController,然后点击按钮x -value更改为0以显示菜单。那是计划。但是,我似乎无法将TabBarController(不是UIView而是UITabBarController)添加到我的SlideController(带有UIScrollViewDelegate的自定义UIViewController)中。有什么建议可以实施吗?到目前为止,这是我的SlideController,它将成为我的RootViewController:

import UIKit

class SlideController: UIViewController, UIScrollViewDelegate {

    override func viewDidLoad() {

        view.addSubview(scrollableView)
        scrollableView.delegate = self

    }

    func scrollViewDidScroll(_ scrollView: UIScrollView) {

        print("scroll to: x ", scrollView.contentOffset.x, " y ", scrollView.contentOffset.y)

    }

    var scrollableView: UIScrollView = {

        let scrollableView = UIScrollView()
        let scrollableWidth = UIScreen.main.bounds.width + (UIScreen.main.bounds.width * 0.5)
        scrollableView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
        scrollableView.contentSize = CGSize(width: scrollableWidth, height: UIScreen.main.bounds.height)
        scrollableView.backgroundColor = .white
        scrollableView.showsHorizontalScrollIndicator = true
        scrollableView.showsVerticalScrollIndicator = true
        scrollableView.alwaysBounceHorizontal = true
        scrollableView.alwaysBounceVertical = true

        return scrollableView

    }()

}

基本上,我想问的是:如何将作为当前rootViewController的UITabBarController添加到UIScrollView?其次,这是一个好主意还是有其他更好的解决方案?开放所有建议和想法。

干杯!

0 个答案:

没有答案