UIStoryboardSegue анимирует свойство в подклассе - PullRequest
0 голосов
/ 23 октября 2018

У меня есть подкласс UIStoryboardSegue для замены текущего контроллера представления на следующий контроллер представления.

Поскольку у нас есть свойство Animates в редакторе интерфейса, я хочу получить доступ к этому свойству в подклассе.

enter image description here

Мой код следующий:

class ReplaceSegue: UIStoryboardSegue {

    override func perform() {
        var viewControllers = source.navigationController?.viewControllers.dropLast() ?? []
        viewControllers.append(destination)
        source.navigationController?.setViewControllers(viewControllers.map {$0}, animated: true) // I dont want this `true` to be hardcoded
    }
}

1 Ответ

0 голосов
/ 23 октября 2018

Согласно комментариям в UIStoryBoardSegue классе

Среда выполнения segue будет вызывать + [UIView setAnimationsAreEnabled:] до вызова этого метода на основе значения флажка Animates в Инспекторе свойств дляthe segue.

Очевидно, что вы можете прочитать значение флажка animate, используя

UIView.areAnimationsEnabled

Так что в моем собственном переходе

class MySegue: UIStoryboardSegue {
    override func perform() {
        debugPrint(UIView.areAnimationsEnabled)
    }
}

Это печатаетfalse если флажок animate - unchecked или true, если он checked:)

Так что в вашем случае

class ReplaceSegue: UIStoryboardSegue {
    override func perform() {
            var viewControllers = source.navigationController?.viewControllers.dropLast() ?? []
            viewControllers.append(destination)
            source.navigationController?.setViewControllers(viewControllers.map {$0}, animated: UIView.areAnimationsEnabled)
    }
}

Я надеюсь, что все уже ясно, еслиу вас все еще есть сомнения, вот объяснение, iOS проверяет значение флажка animates и использует его, чтобы установить, включены ли анимации, вызывая setAnimationsAreEnabled со значением флажка animates в интерфейсе перед вызовом perform() метода.

Таким образом, когда элемент управления достигает внутреннего исполнения, вы можете быть уверены, что iOS уже прочитала флажок значения анимации и использовала его для установки setAnimationsAreEnabled, все, что вам нужно сделать сейчас, это попросить areAnimationsEnabledустановите флажок для получения значения анимации.

Таким образом, вы должны указать флажок для значения анимации:)

Надеюсь, это поможет:)

...