У меня есть приложение, полностью написанное в коде, без раскадровок, которое устанавливает 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? Во-вторых, это отличная идея или есть другие решения, которые могут работать лучше? Открыта для всех предложений и идей.
Ура, ребята!