Я реализую слайд в меню стилей.
Меню добавляется в качестве дочернего контроллера представления на шоу, а затем анимируется в виде.Затем я удаляю его из вида после его закрытия.
Я хотел бы ввести UIPanGestureRecognizer
, чтобы пользователь мог провести его пальцем по виду, однако логика добавления вида срабатывает только при нажатии клавиши open.
Я хотел бы избегать добавления его много раз и при каждом жесте, поэтому я подумал о том, чтобы проверить, присутствует ли он, если не добавить, то анимировать.
lazy var menu menuController= MenuController ()
private var menuWidth: CGFloat = 300
private let keyWindow = UIApplication.shared.keyWindow
override func viewDidLoad() {
super.viewDidLoad()
setupNavigationItems()
setupTableView()
menuController.view.frame = CGRect(x: -menuWidth, y: 0, width: menuWidth, height: view.frame.height)
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handlePan))
view.addGestureRecognizer(panGesture)
}
@objc func handlePan(gesture: UIPanGestureRecognizer) {
let translation = gesture.translation(in: view)
let transform = CGAffineTransform(translationX: translation.x, y: 0)
menuController.view.transform = transform
navigationController?.view.transform = transform
}
@objc func handleOpen() {
keyWindow?.addSubview(menuController.view)
animateMenuController(transform: CGAffineTransform(translationX: self.menuWidth, y: 0)) { }
addChild(menuController)
}
@objc func handleHide() {
animateMenuController(transform: .identity) { [weak self] in
self?.menuController.view.removeFromSuperview()
self?.menuController.removeFromParent()
}
}
Я надеялся сделать что-то подобное
@objc func handlePan(gesture: UIPanGestureRecognizer) {
if view.subviews.contains(MenuController) {
print("yes")
}
let translation = gesture.translation(in: view)
let transform = CGAffineTransform(translationX: translation.x, y: 0)
menuController.view.transform = transform
navigationController?.view.transform = transform
}
Но это не правильно.