UINavigationController - как изменить анимацию для одного UIViewController

Обычно эта ошибка возникает, когда мы отправляем заголовок после эха или печати. Если эта ошибка возникает на определенной странице, убедитесь, что страница не выполняет эхо-сигналы перед вызовом start_session().

Пример непредсказуемой ошибки:

 <?php //a white-space before <?php also send for output and arise error
session_start();
session_regenerate_id();

//your page content

Еще один пример:

<?php
includes 'functions.php';
?> <!-- This new line will also arise error -->
<?php
session_start();
session_regenerate_id();

//your page content

Вывод: не выводить символ перед тем, как вызывать функции session_start() или header(), даже не с помощью пробела или новой строки

1
задан Syed Qamar Abbas 13 July 2018 в 07:44
поделиться

2 ответа

Вы можете проверить определенный контроллер вида на навигационном контроллере, например:

UINavigationcontroller.ViewControllers [номер этого контроллера представления]

и применить к нему эту анимацию.

0
ответ дан Syed faizan ali 17 August 2018 в 13:27
поделиться
  • 1
    Извините, я не понимаю, что вы имеете в виду. Я устанавливаю делегат, а затем нажимаю так, чтобы применить анимацию navigationController.delegate = customOpenDetailAnimationDelegate navigationController.pushViewController (detailViewController, animated: true) Изменяет анимацию для detailViewController, но если я делаю следующий вызов, то есть navigationController.pushViewController (anotherViewController, animated: true), он содержит такая же анимация, но я хочу по умолчанию один – vandzi 13 July 2018 в 07:49
  • 2
    то, что я говорю, очень просто, может быть полезно для вас просто при нажатии с другой проверкой анимации, поскольку контроллер просмотра является вашим желательным, если нет, тогда не применяйте while pushing.if Я правильно понимаю. – Syed faizan ali 13 July 2018 в 07:53

Sub class UINavigationController и использовать переход CoreAnimation's для изменения анимации push / pop.

enum TransitionType {
    case fade
    case movein
    case push
    case reveal
}
enum TransitionSubtype {
    case right
    case left
    case top
    case bottom
}

class MyNavigationController: UINavigationController {

    fileprivate func getTransition(by type: TransitionType) -> String? {
        var transition: String?
        switch type {
        case .fade:
            transition = kCATransitionFade
            break
        case .push:
            transition = kCATransitionPush
            break
        case .movein:
            transition = kCATransitionMoveIn
            break
        case .reveal:
            transition = kCATransitionReveal
            break
        default:
            transition = nil
            break
        }
        return transition
    }
    fileprivate func getSubTransition(by type: TransitionSubtype) -> String? {
        var transition: String?
        switch type {
        case .right:
            transition = kCATransitionFromRight
            break
        case .left:
            transition = kCATransitionFromLeft
            break
        case .top:
            transition = kCATransitionFromTop
            break
        case .bottom:
            transition = kCATransitionFromBottom
            break
        default:
            transition = nil
            break
        }
        return transition
    }

    func display(viewController: UIViewController, animated: Bool, animationType: TransitionType = .push, animationSubtype: TransitionSubtype = .left) -> Bool {
        guard  let type = getTransition(by: animationType) else {return false}
        guard  let subtype = getSubTransition(by: animationSubtype) else {return false}
        if animated {
            let transition = CATransition()
            transition.duration = 0.35
            transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
            transition.type = type
            transition.subtype = subtype
            self.view.layer.add(transition, forKey: nil)
        }
        _ = self.pushViewController(viewController, animated: false)
        return true
    }
    func hide(animated: Bool, animationType: TransitionType = .push, animationSubtype: TransitionSubtype = .left) -> Bool {
        guard  let type = getTransition(by: animationType) else {return false}
        guard  let subtype = getSubTransition(by: animationSubtype) else {return false}
        if animated {
            let transition = CATransition()
            transition.duration = 0.35
            transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
            transition.type = type
            transition.subtype = subtype
            self.view.layer.add(transition, forKey: nil)
        }
        _ = self.popViewController(animated: false)
        return true
    }

}
0
ответ дан Syed Qamar Abbas 17 August 2018 в 13:27
поделиться
  • 1
    Спасибо за ответ. Проблема с этим - CATransition. Он оживляет, но проблема в том, что CATransition имеет нежелательный эффект затухания, который невозможно отключить. Из-за этого я не использую CATransition. – vandzi 13 July 2018 в 09:40
Другие вопросы по тегам:

Похожие вопросы: