动画委托未转换为 Swift 3.0

Posted

技术标签:

【中文标题】动画委托未转换为 Swift 3.0【英文标题】:Animation Delegate not converting to Swift 3.0 【发布时间】:2017-02-05 19:14:13 【问题描述】:

我想实现 CABasicAnimation 并在动画完成时通知 UIViewController。来自此资源:

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

我知道我可以将 viewcontroller 指定为动画的委托,并在 viewcontroller 中覆盖 animationDidStopmethod。但是,当我将以下代码行转换为 Swift 时:

[animation setDelegate:self];

像这样:

animation.delegate = self //没有setDelegate方法

XCode 抱怨:

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

我做错了什么?我错过了什么吗?

【问题讨论】:

【参考方案1】:

您需要确保您的 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) 

    

【讨论】:

以上是关于动画委托未转换为 Swift 3.0的主要内容,如果未能解决你的问题,请参考以下文章

swift 1.2 / xcode 6.3 更新后未调用获取的结果控制器委托

而委托为 nil 或未实现外围设备:didDiscoverCharacteristicsForService:error: (Corebluetooth, Swift)

Swift 3委托函数未调用

使用 iOS 和 Swift 3 在委托方法中未接收到 xmpp 存在

Swift 委托 - 何时在委托上使用弱指针

当广告加载失败时在 Swift 中隐藏 iAd ADBannerView - 没有委托或委托未实现 didFailToReceiveAdWithError