【发布时间】:2015-09-11 08:24:26
【问题描述】:
有什么方法可以通过拖动中心容器来检测抽屉何时关闭?我希望每次关闭抽屉时执行某些操作..
【问题讨论】:
标签: ios swift mmdrawercontroller
有什么方法可以通过拖动中心容器来检测抽屉何时关闭?我希望每次关闭抽屉时执行某些操作..
【问题讨论】:
标签: ios swift mmdrawercontroller
你可以使用
-(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.
*/
【讨论】:
我认为我们可以使用以下辅助方法来检测 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"
}
}];
【讨论】:
您可以在抽屉打开和关闭时收到回调。
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。
【讨论】: