这是我的配置方式:
我创建了 2 个UIBarButtonItem 作为HomeViewController 的属性(我将在代码中设置它们)
let leftButton = UIBarButtonItem()
let rightButton = UIBarButtonItem()
在viewDidLoad方法中:
revealViewController().delegate = self
在viewWillAppear方法中:
if (revealViewController() != nil) {
revealViewController().rearViewRevealWidth = -50
revealViewController().rightViewRevealWidth = -50
leftButton.image = UIImage(named: "yourImageName")! // check that the image exists, don't use !
leftButton.style = .plain
leftButton.target = revealViewController()
leftButton.action = #selector(SWRevealViewController.revealToggle(_:))
rightButton.image = UIImage(named: "yourImageName")! // check that the image exists, don't use !
rightButton.style = .plain
rightButton.target = revealViewController()
rightButton.action = #selector(SWRevealViewController.rightRevealToggle(_:))
view.addGestureRecognizer(revealViewController().panGestureRecognizer())
view.addGestureRecognizer(revealViewController().tapGestureRecognizer())
}
这是我用来在 HomeViewController 中设置 SWRevealViewController 以便拥有左右菜单的所有代码。
您现在可以使用委托方法来自定义您喜欢的行为:
extension HomeViewController: SWRevealViewControllerDelegate {
func revealController(_ revealController: SWRevealViewController!, willMoveTo position: FrontViewPosition) {
view.alpha = position == FrontViewPosition.left ? 1.0 : 0.6
}
}
我在 HomeViewController 上设置了一个 alpha 值,当它不在前面时让它变暗。
故事板部分:
- 在 Storyboard 中创建一个 UIViewController。
- 将其类更改为 SWRevealViewController
- 再创建 2 个 UIViewController(1 个用于左侧菜单,1 个用于右侧菜单。如果您只需要 1 个菜单,请根据需要申请左侧或右侧)
- 使用 segues(
rear 和 right segues)将 SWRevealViewController 链接到 2 个 UIViewControllers
- 使用
front segue 将 SWRevealViewController 链接到您的 UINavigationController。
- 将 UINavigationController 与您的 HomeViewController 链接(使用
root relationship)
请记住,您可能还想为 RegisterViewController 和 HomeViewController 之间的转换创建自定义 segue。
您也可以通过编程方式创建它:
class RegisterToHomeSegue: UIStoryboardSegue {
override func perform() {
let source = self.source as! RegisterViewController
let homeVC = self.destination as! HomeViewController
let window = source.view.window
window?.rootViewController = homeVC
window?.addSubview(source.view)
UIView.transition(from: source.view, to: homeVC.view, duration: 0.50, options: .transitionCrossDissolve, completion: nil)
}
}
然后在Storyboard 中将类segue 从RegisterViewController 更改为SWRevealViewController 到这个新的RegisterToHomeSegue 并给它一个标识符。这样您就可以在RegisterViewController 中调用:
performSegue(withIdentifier: "yourIdentifier", sender: nil)
还有voilà,你现在有:
- RegisterViewController 和 HomeViewController 之间的完美过渡
- 您的 SWRevealController 设置正确,带有左右菜单
- 左右键项目,点击手势打开相应菜单
- 在 HomeViewController 打开时更改其 alpha
告诉我它是否对你有帮助。