在使用MMDrawerController时检测抽屉何时closures

有什么方法可以通过拖动中央容器closures抽屉? 每次抽屉closures时,我都希望执行某些操作。

您可以使用

-(void)setGestureCompletionBlock:(void(^)(MMDrawerController * drawerController, UIGestureRecognizer * gesture))gestureCompletionBlock; 

设置手势完成时要通知的callback块。 在这个块中,查询drawerController来知道当前打开的是什么。

 /** Sets a callback to be called when a gesture has been completed. This block is called when a gesture action has been completed. You can query the `openSide` of the `drawerController` to determine what the new state of the drawer is. @param gestureCompletionBlock A block object to be called that allows the implementer be notified when a gesture action has been completed. */ 

我想我们可以使用下面的帮助器方法来检测MMDrawerController状态。

对于Objective-C

 - (BOOL)isLeftOpen { return (self.mm_drawerController.openSide == MMDrawerSideLeft); } - (BOOL)isRightOpen { return (self.mm_drawerController.openSide == MMDrawerSideRight); } 

对于Swift-3.x

 func isLeftOpen() -> Bool { return mm_drawerController.openSide == .left } func isRightOpen() -> Bool { return mm_drawerController.openSide == .right }. 

来源: https //github.com/mutualmobile/MMDrawerController/issues/337

使用Quentin的答案,您可以检查手势完成时的抽屉宽度

  [self setGestureCompletionBlock:^(MMDrawerController *drawerController, UIGestureRecognizer *gesture) { if (drawerController.visibleLeftDrawerWidth == 0.0f) { // "perform certain actions" } }]; 

每当抽屉打开和closures时,您都可以获得回叫。

 drawerController?.setDrawerVisualStateBlock({ (drawer, drawerSide, percentVisible) in print(percentVisible) if percentVisible > 0 && self.blackView.superview == nil { //drawer opened } if percentVisible == 0 { //drawer closed } }) 

注:当抽屉closures时,percentVisible将为0,抽屉打开时为1。