Подтвердить что ты не робот

Отключение анимации segue

Я хочу показать (например, push) segues в своем раскадровке, подключить мои контроллеры view и мой навигационный контроллер. Затем навигационные панели на контроллерах view будут отображаться правильно. Например: с подробной детализацией или текущей модалией панель навигации исчезнет

Но я не хочу анимации segue. Xcode дает предупреждение: "Отключение анимации segue недоступно до iOS 9.0"

И я хочу, чтобы цель развертывания iOS 7.0 или 8.0

Как я могу это решить?

Заранее спасибо.

4b9b3361

Ответ 1

Вы можете отключить анимацию перед выполнением segue и после ее повторного включения.

UIView.setAnimationsEnabled(false)
self.performSegueWithIdentifier("next", sender: nil)
UIView.setAnimationsEnabled(true)

Это позволит выполнить сеанс без анимации.

Ответ 2

Я сделал пользовательский segue, используя ответ Swift в этой теме:
Push segue в xcode без анимации

Так:

class ShowNoAnimationSegue: UIStoryboardSegue {

    override func perform() {
        let source = sourceViewController as UIViewController
        if let navigation = source.navigationController {
            navigation.pushViewController(destinationViewController as UIViewController, animated: false)
        }
    }
}

И в Xcode, в Инспекторе атрибутов пользовательских Segues, я проверил поле "Анимация" (YES). Теперь предупреждение исчезло, поэтому я отвечаю на свой вопрос.

Я еще не уверен, если это долговременное решение.

Ответ 3

Нажмите стрелку segue в Main.Storyboard, а затем:

enter image description here

Animates

Ответ 4

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

class MyNavigationController : UINavigationController {

    var firstTransitionAnimated : Bool = true // or false, based on initialization


    override func viewDidLoad() {
        super.viewDidLoad()
        var properSegue = firstTransitionAnimated ? "animated_segue" : "not_animated_segue"
        self.performSegue(withIdentifier: properSegue, sender: self)
    }
}