【问题标题】:Left to right animation not working after upgrade to Swift 3.0升级到 Swift 3.0 后从左到右的动画不起作用
【发布时间】:2016-10-07 20:33:36
【问题描述】:

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

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

错误信息说:

无法将“AnyObject”类型的值赋给 CAAnimation 类型

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

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 中工作得很好,但现在它不起作用了。像这样的小东西让我发疯......任何帮助将不胜感激;)

【问题讨论】:

  • 哇,伙计们!感谢您的超快速答案,我很感激。我确信这两个答案都会奏效,但我尝试了 Rob's 并且它奏效了。非常感谢大家!

标签: swift swift3 caanimation


【解决方案1】:

现在是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")
}

【讨论】:

    【解决方案2】:
    Try this , Its working in my code:
    
     let swipeRight:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.swipedRight))
            swipeRight.direction = .right
            SLIDEVIEW.addGestureRecognizer(swipeRight)
    
    
            let swipeLeft:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.swipedLeft))
            swipeLeft.direction = .left
            SLIDEVIEW.addGestureRecognizer(swipeLeft)
    
    func swipedRight()
        {
            print("swiped right")
            updateFrames(towards: "right")
        }
    
        func swipedLeft()
        {
            print("swiped left")
            updateFrames(towards: "left")
        }
    

    【讨论】:

      猜你喜欢
      • 2016-03-01
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      • 2017-02-27
      • 2018-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多