2017-02-05 7 views
0

Я хочу реализовать CABasicAnimation и уведомить UIViewController о завершении анимации. Из этого ресурса:Анимация Делегат не конвертируется в Swift 3.0

http://www.informit.com/articles/article.aspx?p=1168314&seqNum=2

я понял, что можно указать ViewController в качестве делегата для анимации и переопределить animationDidStop метод в ViewController. Однако, когда я преобразовать следующую строку кода в Swift:

[animation setDelegate:self]; 

так:

animation.delegate = самообеспечение // нет метода setDelegate

XCode жалуется:

Cannot assign value of type 'SplashScreenViewController' to type 'CAAnimationDelegate?' 

Что я делаю неправильно? Я что-то упускаю?

ответ

4

Вам необходимо убедиться, что ваш viewController соответствует CAAnimationDelegate.

class SplashScreenViewController: UIViewController, CAAnimationDelegate { 

    // your code, viewDidLoad and what not 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let animation = CABasicAnimation() 
     animation.delegate = self 
     // setup your animation 

    } 

    // MARK: - CAAnimation Delegate Methods 
    func animationDidStart(_ anim: CAAnimation) { 

    } 

    func animationDidStop(_ anim: CAAnimation, finished flag: Bool) { 

    } 

    // Add any other CAAnimationDelegate Methods you want 

} 

Вы можете также соответствовать делегату путем использования расширения:

extension SplasScreenViewController: CAAnimationDelegate { 
    func animationDidStart(_ anim: CAAnimation) { 

    } 

    func animationDidStop(_ anim: CAAnimation, finished flag: Bool) { 

    } 
}