【问题标题】:Detect when the drawer is closed while using MMDrawerController在使用 MMDrawerController 时检测抽屉何时关闭
【发布时间】:2015-09-11 08:24:26
【问题描述】:

有什么方法可以通过拖动中心容器来检测抽屉何时关闭?我希望每次关闭抽屉时执行某些操作..

【问题讨论】:

    标签: ios swift mmdrawercontroller


    【解决方案1】:

    你可以使用

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

    设置一个回调块以在手势完成时得到通知。在此块中,查询抽屉控制器以了解当前打开的内容。

    /**
     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.
     */
    

    【讨论】:

    • 在我的 App Delegate 中?或者在我使用抽屉的任何视图控制器中?
    • 每次调用该方法时,回调都会被替换。所以 AppDelegate 听起来不错 ;)
    • 知道 Swift 版本是什么吗?
    • 我不熟悉 Swift :(
    • 好的.. 谢谢你的帮助:)
    【解决方案2】:

    我认为我们可以使用以下辅助方法来检测 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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        您可以在抽屉打开和关闭时收到回调。

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

        注意:当抽屉关闭时,percentVisible 为 0,抽屉打开时为 1。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-02-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-02
          • 2018-10-02
          • 1970-01-01
          相关资源
          最近更新 更多