Согласно комментариям в 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
установите флажок для получения значения анимации.
Таким образом, вы должны указать флажок для значения анимации:)
Надеюсь, это поможет:)