淡入动画不起作用 swift 2

FadeIn animation not work swift 2

下面是我的代码。 淡出效果很好。然而,淡入淡出效果不是动画。 我无法解决这个问题。感谢所有帮助我的人。 故事板中的 Alpha 设置为 0

extension UIView {

    func fadeIn(duration: NSTimeInterval = 3.0, delay: NSTimeInterval = 0.0, completion: ((Bool) -> Void) = {(finished: Bool) -> Void in}) {
        UIView.animateWithDuration(duration, delay: delay, options: UIViewAnimationOptions.CurveLinear, animations: {
            self.alpha = 1.0
            }, completion: completion)  }

    func fadeOut(duration: NSTimeInterval = 2.0, delay: NSTimeInterval = 3.0, completion: (Bool) -> Void = {(finished: Bool) -> Void in}) {
        UIView.animateWithDuration(duration, delay: delay, options: UIViewAnimationOptions.CurveEaseOut, animations: {
            self.alpha = 0.0
            }, completion: completion)
    }

}

你的代码在操场上对我来说工作得很好:

import UIKit
import XCPlayground

extension UIView {
    func fadeIn(duration: NSTimeInterval = 3.0, delay: NSTimeInterval = 0.0, completion: ((Bool) -> Void) = {(finished: Bool) -> Void in}) {
        UIView.animateWithDuration(duration, delay: delay, options: UIViewAnimationOptions.CurveLinear, animations: {
            self.alpha = 1.0
        }, completion: completion)  
    }

    func fadeOut(duration: NSTimeInterval = 2.0, delay: NSTimeInterval = 3.0, completion: (Bool) -> Void = {(finished: Bool) -> Void in}) {
        UIView.animateWithDuration(duration, delay: delay, options: UIViewAnimationOptions.CurveEaseOut, animations: {
            self.alpha = 0.0
        }, completion: completion)
    }
}

let liveView = UIView(frame: CGRect(origin: CGPointZero, size: CGSize(width: 400, height: 400)))
XCPlaygroundPage.currentPage.liveView = liveView

let newView = UIView(frame: CGRect(x: 200, y: 200, width: 50, height: 50))
newView.backgroundColor = UIColor.greenColor()
newView.alpha = 0

liveView.addSubview(newView)
newView.fadeIn { _ in newView.fadeOut{ _ in newView.fadeIn() } }

它淡入,在淡入完成时淡出,然后在淡出完成时淡入。

也许问题出在您在视图中调用 fadeIn() 方法的位置/时间,而不是您的扩展程序本身的问题。

调用后直接调用 UIView.animationWithDuration 将取消之前的动画,即使您在函数调用中提供延迟也是如此。但是,您可以像@Daniel Hall 建议的那样使用完成功能:

myView.fadeIn() {  _ in
   myView.fadeOut() 
}

或者,如果您使用不同的方法执行淡入淡出,该方法恰好在淡入之后由某个事件触发,您可以使用 dispatch_after 在延迟时间(在您的情况下应该是淡入持续时间)后执行

let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(0.5 * Double(NSEC_PER_SEC)))
dispatch_after(delayTime, dispatch_get_main_queue()) {
    self.myView.fadeOut()
}