2016-08-19 92 views
2

以下是我的代码。 淡出效果正常。然而,淡入淡出效果并非动画效果。 我无法解决这个问题。感谢那些能帮助我的人。 阿尔法在故事板FadeIn动画不工作swift 2

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) 
    } 

} 
+0

ru试图在淡出后直接进行淡入? – mtaweel

+0

淡入淡出后没有淡出 –

回答

2

在调用UIView.animationWithDuration后直接调用即使您在函数调用中提供了延迟,也会取消以前的动画。但是,您可以使用像@Daniel大厅完成功能建议:

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() 
} 
+0

Fadeout()覆盖fadein()达赖解决方案 –

1

代码中设置0对我来说工作正常的游乐场内:

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()方法,而不是您的扩展本身的问题。

+0

这个问题可能存在,用下面的代码在touchesBegan()函数中调用它:mylabel.fadein(); mylabel.fadeout() –

+0

@LuigiFestinante啊,那是你的问题呢!你正在调用'fadeIn()',然后立即调用'fadeOut()'。所以有意义的是,你看不到淡入淡出和完成。试试这个:'my label.fadein {_ in mylabel.fadeOut()}'。它在'fadeIn()'的完成处理程序中传递'fadeOut()'命令,而不是立即运行它。 –

+0

谢谢你现在的工作 –