Обнаружение закрытия ящика при использовании MMDrawerController

Есть ли способ определить, когда ящик закрыт, перетащив центральный контейнер? Я хочу выполнять определенные действия каждый раз, когда ящик закрыт.


person genaks    schedule 11.09.2015    source источник


Ответы (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
comment
в моем делегате приложения? Или в любом контроллере представления, в котором я использую ящик? - person genaks; 11.09.2015
comment
Каждый раз, когда вы будете вызывать этот метод, обратный вызов будет заменяться. Так что AppDelegate звучит хорошо;) - person Quentin Hayot; 11.09.2015
comment
Есть идеи, какой будет версия Swift? - person genaks; 11.09.2015
comment
Я не знаком со Свифтом :( - person Quentin Hayot; 11.09.2015
comment
Хорошо .. Спасибо за вашу помощь :) - person genaks; 11.09.2015
comment
Не могли бы вы объяснить, как я могу использовать это в делегате приложения? - 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