我正在实现一个滑动式菜单。
菜单作为子视图控制器添加到显示中,然后以动画方式进入视图。一旦关闭,我会将其从视图中移除。
我想引入一个UIPanGestureRecognizer
,以便用户可以通过滑动将其显示出来,但是添加视图的逻辑只在按下打开按钮时触发。
我希望避免多次添加和每次手势都添加,所以我考虑检查它是否存在,如果不存在则添加,然后进行动画。
懒加载变量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
}
但这是不正确的。
self.children.contains(MenuController)
属性。 - SPatel