这是我的配置方式:
我创建了 2UIBarButtonItem
作为属性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 个 UIViewControllers(1 个用于左侧菜单,1 个用于右侧菜单。如果您只想要 1 个菜单,请根据需要申请左侧或右侧)
- 将 SWRevealViewController 链接到带有 segues (
rear
和right
segues)的 2 个 UIViewControllers
- 将 SWRevealViewController 链接到您的 UINavigationController 与
front segue
.
- 将 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
将类从您RegisterViewController
的更改为SWRevealViewController
新的类RegisterToHomeSegue
并给它一个标识符。这样RegisterViewController
您就可以调用:
performSegue(withIdentifier: "yourIdentifier", sender: nil)
而且voilà
,您现在拥有:
- RegisterViewController 和 HomeViewController 之间的良好过渡
- 您的 SWRevealController 设置正确,其左右菜单
- 左右键项目,带有点击手势打开相应菜单
- 更改 HomeViewController 打开时的 alpha
告诉我它是否对你有帮助。