2017-02-16 60 views
0

我有下面的代碼,它完成了我所需要的。由於應用程序的性質,我不得不專門針對這些UI元素,而不是使用UIView。Swift - 優化UI動畫淡化

@IBAction func hidecontrols(_ sender: UIButton) { 
    UIView.animate(withDuration: 0.5) { 
    self.brightnesstitle.alpha = 0 
    self.brightnesslbl.alpha = 0 
    self.brightnesssldr.alpha = 0 
    self.kelvintitle.alpha = 0 
    self.kelvinlbl.alpha = 0 
    self.kelvinsldr.alpha = 0 
    self.greentitleminus.alpha = 0 
    self.greentitleplus.alpha = 0 
    self.greenzerobtn.alpha = 0 
    self.greensldr.alpha = 0 
    self.greensldrdiv.alpha = 0 
    self.hidecontrolsbtn.alpha = 0 
    } 
} 

我想優化它,但我浪費了幾個小時嘗試,所以我離開它。我最初嘗試了一個for循環,其中我將各種UI名稱放入一個數組中,但無論我嘗試了什麼,它都不會正確地通過字符串,並聲稱.alpha不是字符串的成員。

有沒有辦法給我想要影響的每個UI元素分配一個自定義值,然後對每個具有該值的元素調用淡出動畫?

回答

0

啊哈,我能想到兩種方法:

簡單的版本。如果以上所有的變量是UIView實例或UIView子類,那麼你可以做:

let fadingViews: [UIView] = [brightnesstitle, brightnesslbl, ...] 
UIView.animate(withDuration: 0.5) { fadingViews.forEach { $0.alpha = 0 } } 

如果他們中的一些不UIView的情況下,那麼你可以這樣定義

protocol Fadable { 
    var alpha: CGFloat { get set } 
} 

extension UIView: Fadable {} 
extension MyClass: Fadabale {} 

協議然後做

let fadables: [Fadable] = [brightnesstitle, brightnesslbl, ...] 
UIView.animate(withDuration: 0.5) { fadingViews.forEach { $0.alpha = 0 } }