swift - 升级到 Swift 3.0 后,从左到右的动画不起作用

标签 swift swift3 caanimation

所以我刚从 2.3 升级到 Swift 3.0。除了这行代码及其错误外,我项目的其他一切都很好:

        if let delegate: AnyObject = completionDelegate {
        leftToRightTransition.delegate = delegate //ERROR MESSAGE
    }

错误信息是这样的:

Cannot assign value of type 'AnyObject' to type CAAnimation

下面是完整的相关代码块。本质上,这段代码就是动画。在我的项目的其他地方(我肯定这与问题无关,但只是为了上下文)有代码允许用户滑动图像数组。这个 block 是它的动画部分(“滑动”动画):

extension UIView {
func rightToLeftAnimation(_ duration: TimeInterval = 0.5, completionDelegate: AnyObject? = nil) {
    // Create a CATransition object
    let rightToLeftTransition = CATransition()

    // Set its callback delegate to the completionDelegate that was provided
    if let delegate: AnyObject = completionDelegate {
        rightToLeftTransition.delegate = delegate //ERROR MESSAGE ON THIS LINE
    }

    rightToLeftTransition.type = kCATransitionPush
    rightToLeftTransition.subtype = kCATransitionFromLeft
    rightToLeftTransition.duration = duration
    rightToLeftTransition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    rightToLeftTransition.fillMode = kCAFillModeRemoved

    // Add the animation to the View's layer
    self.layer.add(rightToLeftTransition, forKey: "rightToLeftTransition")
}

这在 Swift 2.3 中工作得很好,但现在不工作了。像这样的小事让我发疯……任何帮助将不胜感激;)

最佳答案

它现在是一个CAAnimationDelegate:

if let delegate = completionDelegate as? CAAnimationDelegate {
    rightToLeftTransition.delegate = delegate
}

或者只是:

func rightToLeftAnimation(_ duration: TimeInterval = 0.5, completionDelegate: CAAnimationDelegate? = nil) {
    // Create a CATransition object
    let rightToLeftTransition = CATransition()

    // Set its callback delegate to the completionDelegate that was provided
    rightToLeftTransition.delegate = completionDelegate

    rightToLeftTransition.type = kCATransitionPush
    rightToLeftTransition.subtype = kCATransitionFromLeft
    rightToLeftTransition.duration = duration
    rightToLeftTransition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    rightToLeftTransition.fillMode = kCAFillModeRemoved

    // Add the animation to the View's layer
    layer.add(rightToLeftTransition, forKey: "rightToLeftTransition")
}

关于swift - 升级到 Swift 3.0 后,从左到右的动画不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39925377/

相关文章:

ios - 将表情符号从 JSON 字符串转换为字符

ios - 如果需要处理函数,则无法将 alertController 移动到 UIViewController 扩展

ios - Swift 泛型函数问题。减少重复代码

ios - 使用 Alamofire 路由器显示事件指示器

swift - 为什么 Swift 的大于或小于运算符不能比较选项,而相等运算符可以?

ios - 导航栏未显示在嵌入的导航 Controller 中

ios - 在精确点以编程方式添加 SKLabelNode

ios - 制作动画来扩大和缩小 UIView

ios - 为什么更改选项卡,停止 ios 应用程序中的动画?

ios - 寻找两点之间的角度