2016-08-19 42 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

謝謝你現在的工作 –