6
A
回答
6
即使視圖已經加載,當調用viewDidLoad
時,用戶可能看不到該視圖。這意味着你可能會發現你的動畫看起來已經開始了。爲了解決這個問題,你需要改用viewDidAppear
開始動畫。
至於fadeIn
和fadeOut
功能 - 它們不存在。你需要自己寫。謝天謝地,這很容易做到。像下面的東西可能會足夠好。
func fadeViewInThenOut(view : UIView, delay: NSTimeInterval) {
let animationDuration = 0.25
// Fade in the view
UIView.animateWithDuration(animationDuration, animations: {() -> Void in
view.alpha = 1
}) { (Bool) -> Void in
// After the animation completes, fade out the view after a delay
UIView.animateWithDuration(animationDuration, delay: delay, options: .CurveEaseInOut, animations: {() -> Void in
view.alpha = 0
},
completion: nil)
}
}
14
我的建議是利用Swift擴展使代碼更加模塊化,易於使用。例如,如果您想讓多個標籤淡入淡出或一個標籤在多個視圖中淡入/淡出,則必須在各處傳遞animateWithDuration方法,這可能很麻煩。一個更清潔的選擇是創建一個名爲UIView.swift的文件(我們的UIView擴展)。下面的代碼添加到該文件:
import Foundation
extension UIView {
func fadeIn(duration: NSTimeInterval = 1.0, delay: NSTimeInterval = 0.0, completion: ((Bool) -> Void) = {(finished: Bool) -> Void in}) {
UIView.animateWithDuration(duration, delay: delay, options: UIViewAnimationOptions.CurveEaseIn, animations: {
self.alpha = 1.0
}, completion: completion) }
func fadeOut(duration: NSTimeInterval = 1.0, delay: NSTimeInterval = 3.0, completion: (Bool) -> Void = {(finished: Bool) -> Void in}) {
UIView.animateWithDuration(duration, delay: delay, options: UIViewAnimationOptions.CurveEaseIn, animations: {
self.alpha = 0.0
}, completion: completion)
}
}
現在你可以添加淡入/淡出功能的UIView(例如,的UILabel,UIImage的,等等)的任何子女。裏面你的viewDidLoad()函數,你可以添加:現在
self.statusLabel.alpha = 0
self.statusLabel.text = "Sample Text Here"
self.myLabel.fadeIn(completion: {
(finished: Bool) -> Void in
self.myLabel.fadeOut()
})
,您可以使用此示例代碼的圖像視圖,標籤,文本視圖,滾動視圖或UIView的任何孩子爲好。我希望這有幫助。
4
更新雨燕3.1 - 在@Andy代碼
func fadeViewInThenOut(view : UIView, delay: TimeInterval) {
let animationDuration = 0.25
// Fade in the view
UIView.animate(withDuration: animationDuration, animations: {() -> Void in
view.alpha = 1
}) { (Bool) -> Void in
// After the animation completes, fade out the view after a delay
UIView.animate(withDuration: animationDuration, delay: delay, options: [.curveEaseOut], animations: {() -> Void in
view.alpha = 0
}, completion: nil)
}
}
+0
編輯按鈕出於某種原因。複製粘貼答案只是稍微修改語法並不好。 – Fogmeister
4
回答更新的斯威夫特3 - 使用擴展
extension UIView {
func fadeIn(duration: TimeInterval = 1.0, delay: TimeInterval = 0.0, completion: @escaping ((Bool) -> Void) = {(finished: Bool) -> Void in}) {
UIView.animate(withDuration: duration, delay: delay, options: UIViewAnimationOptions.curveEaseIn, animations: {
self.alpha = 1.0
}, completion: completion)
}
func fadeOut(duration: TimeInterval = 1.0, delay: TimeInterval = 3.0, completion: @escaping (Bool) -> Void = {(finished: Bool) -> Void in}) {
UIView.animate(withDuration: duration, delay: delay, options: UIViewAnimationOptions.curveEaseIn, animations: {
self.alpha = 0.0
}, completion: completion)
}
}
用法:
self.statusLabel.alpha = 0
self.statusLabel.text = "Sample Text Here"
self.myLabel.fadeIn(completion: {
(finished: Bool) -> Void in
self.myLabel.fadeOut()
})
相關問題
- 1. (Swift)淡入淡出標籤
- 2. 如何使用淡入淡出/淡入淡出使用JS
- 3. 點擊錨標籤時淡入淡出
- 4. 淡入淡出改變標籤?
- 5. 懸停時淡入/淡出標籤
- 6. C#文本標籤淡入/淡出
- 7. 兩個C4Images之間的淡入淡出或淡入淡出
- 8. 淡入淡出或淡入淡出後的顯示塊
- 9. 淡入淡出div標記
- 10. JQuery - IE6 - 如何同時淡入淡出和淡入淡出?
- 11. 如何讓組合框的標籤在Flex中淡入淡出
- 12. 如何將交叉淡入淡出添加到UI標籤?
- 13. jScrollPane標籤 - 如何讓它們淡入淡出?
- 14. 如何淡入和淡出標籤。連續
- 15. 如何淡入淡出?
- 16. 如何在淡入時淡入淡入淡出
- 17. 如何使菜單淡入淡出?
- 18. 如何使文字淡入淡出
- 19. 如何使用ECSlidingController淡入淡出topviewcontoller?
- 20. jquery淡出,淡入淡出,等待,淡入淡出
- 21. 淡入淡出
- 22. 淡入淡出
- 23. 淡入淡出
- 24. 淡入淡出UILabel,改變文字,淡入淡出:只有淡入淡出
- 25. 使用陣列中的字符串淡入/淡出標籤
- 26. 如何使用C#中的定時器使標籤淡入淡出?
- 27. 淡入/淡出UIScrollView的內容如Mobile Safari在其標籤
- 28. 使fadetoggle淡入淡出
- 29. 使用jQuery淡入淡出
- 30. 如何在vb.net中使用帶淡入/淡出的標籤顯示消息?
這應該是正確答案。非常乾淨和抽象。謝謝。 – user3286381
這是一個很棒的解決這個問題的方法。 –
這看起來不錯!謝謝。僅供參考「完成」參數需要一個@escaping關閉。 – adamcee