Добавить выдвижное меню в TabBarController в Swift (с UIScrollView) - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть приложение, полностью написанное в коде, без раскадровок, которое устанавливает rootViewController в AppDelegate на TabBarController. Это пользовательский класс UITabBarController, который устанавливает все представления, добавляет соответствующие ViewController внутри и устанавливает NavigationController для каждого ViewController.

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

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

Теперь все работает, но я хочу добавить выпадающее меню слева, чтобы отобразить пару настроек. Мне нужна кнопка на главном экране слева (внутри NavigationController), и когда я нажимаю на нее, я хочу, чтобы меню скользило, соответственно перемещая текущий ViewController вправо. Отличный пример - когда вы нажимаете на свою фотографию профиля в верхней левой части канала в Twitter.

Я подумал о нескольких способах реализации этого, много читал в Интернете и видел примеры, в которых часто используются сторонние плагины или раскадровки, которые мне не нужны. Другие примеры, кажется, работают, но не с TabBarController.

Я хотел бы использовать UIScrollView для достижения этой цели, установив для contentSize значение, в 1,5 раза превышающее ширину UIScreen, при открытии приложения значение x уменьшается на половину ширины экрана, поэтому отображается ViewController, а затем при нажатии кнопки x -значение меняется на 0, чтобы показать меню. Это план. Тем не менее, я не могу добавить TabBarController (который не является UIView, но UITabBarController) к моему SlideController (пользовательский UIViewController с UIScrollViewDelegate). Любые предложения, как я могу это реализовать? Это мой 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

    }()

}

По сути, я хочу спросить: как я могу добавить UITabBarController, который является моим текущим rootViewController, в UIScrollView? Во-вторых, это отличная идея или есть другие решения, которые могут работать лучше? Открыта для всех предложений и идей.

Ура, ребята!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...