在 Swift 3 中设置 CABasicAnimation 委托的问题?

Posted

技术标签:

【中文标题】在 Swift 3 中设置 CABasicAnimation 委托的问题?【英文标题】:Issue setting CABasicAnimation delegate in Swift 3? 【发布时间】:2016-07-28 22:52:14 【问题描述】:

我收到以下错误

无法将类型“StarButton”的值分配给类型 'CAAnimationDelegate?'

在这个 CABasicAnimation 块的最后一行:

 let fillCircle = CABasicAnimation(keyPath: "opacity")
 fillCircle.toValue = 0
 fillCircle.duration = 0.3
 fillCircle.setValue(notFavoriteKey, forKey: starKey)
 fillCircle.delegate = self // this is where the error is thrown

self 是一个自定义 UIButton 类。这在以前版本的 Swift 中不是问题……有什么解决方案的建议吗?

更新

这里是 StarButton 类的源文件的可下载链接,以供最佳参考:

https://www.dropbox.com/s/gvc2sky05f4p3au/StarButton.swift?dl=0

【问题讨论】:

你确定它符合委托协议吗? UIButton 来自 Apple Docs (developer.apple.com/library/ios/documentation/UIKit/Reference/…) 不符合 CAAnimationDelegate。您是否明确表示您的子类是委托?见***.com/questions/24024466/… 也许 Swift 3 使协议强制转换变得严格了?无论如何,您仍然应该添加协议;如果该类支持成为委托,则应在声明中说明 添加一个协议就像添加另一个超类;如果您有类似class StarButton: UIButton 的内容,请替换为class StarButton: UIButton, CABasicAnimationDelegate 只需将class StarButton: UIButton 行替换为class StarButton: UIButton, CAAnimationDelegate 。您可能还需要导入 CoreAnimation 【参考方案1】:

正如上面cmets中提到的@Doc,解决方法是替换

class StarButton: UIButton  

class StarButton: UIButton, CAAnimationDelegate 

似乎不再隐含 CAAnimationDelegate 协议,必须明确指定。

【讨论】:

以上是关于在 Swift 3 中设置 CABasicAnimation 委托的问题?的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 3 中设置 CABasicAnimation 委托的问题?

无法在 MapView,Swift 3 中设置自定义图钉图像

如何在 Swift 3 中设置 UIButton 的图像?

如何在 Alamofire 4 和 Swift 3 中设置方法、标题、参数

在 Swift 3 中设置 UserDefaults 的问题

Swift 3 - 根据单击的单元格在 TableViewController swift 文件中设置变量