Есть ли способ определить, когда ящик закрыт, перетащив центральный контейнер? Я хочу выполнять определенные действия каждый раз, когда ящик закрыт.
Обнаружение закрытия ящика при использовании MMDrawerController
Ответы (4)
Вы можете использовать
-(void)setGestureCompletionBlock:(void(^)(MMDrawerController * drawerController, UIGestureRecognizer * gesture))gestureCompletionBlock;
чтобы установить блок обратного вызова для уведомления о завершении жеста. В этом блоке запросите 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.
*/
person
Quentin Hayot
schedule
11.09.2015
в моем делегате приложения? Или в любом контроллере представления, в котором я использую ящик?
- person genaks; 11.09.2015
Каждый раз, когда вы будете вызывать этот метод, обратный вызов будет заменяться. Так что AppDelegate звучит хорошо;)
- person Quentin Hayot; 11.09.2015
Есть идеи, какой будет версия Swift?
- person genaks; 11.09.2015
Я не знаком со Свифтом :(
- person Quentin Hayot; 11.09.2015
Хорошо .. Спасибо за вашу помощь :)
- person genaks; 11.09.2015
Не могли бы вы объяснить, как я могу использовать это в делегате приложения?
- person Ne AS; 03.07.2017
Я думаю, что мы можем использовать следующие вспомогательные методы для определения состояния MMDrawerController.
Для цели-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
person
Aamir
schedule
12.06.2017
Используя ответ Квентина, вы можете проверить ширину ящика при завершении жеста как
[self setGestureCompletionBlock:^(MMDrawerController *drawerController, UIGestureRecognizer *gesture) {
if (drawerController.visibleLeftDrawerWidth == 0.0f) {
// "perform certain actions"
}
}];
person
Francisco Amado
schedule
07.12.2015
Вы можете получить обратный вызов всякий раз, когда ящик будет открыт и закрыт.
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, когда ящик будет открыт.
person
Garima Saini
schedule
18.07.2017