Переход к просмотру контроллера в строке меню - PullRequest
2 голосов
/ 06 февраля 2020

Я закончил следовать этому уроку на боковой панели меню Гэри Токмана (https://www.youtube.com/watch?v=vKh1b3ctCf4 3 СЕРИИ ЧАСТЕЙ), где он создает панель меню, которая открывает вид, который меняет цвет в зависимости от элемента в строка меню, которую он нажимает.
Однако, поскольку я на самом деле хочу сделать его открытым для контроллеров представления, я смотрел в комментариях, чтобы увидеть, была ли у кого-то такая же идея, как и в верхнем комментарии.
Однако, что делает пользователь, каждый раз, когда выбирается какой-либо пункт меню, он просто помещает подпредставление поверх текущего представления.
После нескольких раз использования строки меню вы можете видеть, что виды просто накладываются друг на друга и память накапливается.
Существует ли жизнеспособный способ удаления каждого вида при выборе нового пункта меню или каким-либо другим методом.
Также еще один побочный вопрос: когда открывается строка меню, можно ли прикоснуться к черной части экрана и закрыть ее, не выбирая пункт меню. Заранее спасибо!

1 Ответ

1 голос
/ 15 февраля 2020

Для изменения контроллера представления реализация контроллера представления контейнера представляется наилучшим решением. Что касается ваших вопросов:

Существует ли жизнеспособный способ удалить каждое представление при выборе нового пункта меню или каким-либо другим методом.

Да, это выглядит так (например, в HomeViewController): перед добавлением нового представления вызовите этот метод

func clearSubviews() {
            for v in self.view.subviews {
                    v.removeFromSuperview()
                }
        }

Для , когда строка меню открыта, есть способ прикоснуться к черной части экрана и закрыть ее, не выбирая пункт меню.

просто создайте метод для перехода назад - в основном как animateTransition(...), но без изменения чего-либо, кроме фреймов. Затем создайте распознаватель жестов и добавьте его в dimmingView следующим образом:

var recognizer = UITapGestureRecognizer.init(target: self, action: #selector(transitionBack))
        dimmingView.addGestureRecognizer(recognizer)

распознаватель жестов не должен вызываться, когда dimmingView alpha установлен на ноль, поэтому он не будет вызываться, когда меню скрыто.

конечно transitionBack должен иметь пометку @objc, чтобы в этом распознавателе можно было действовать.

Удачи!

...