2017-02-16 8 views
0

나는 내가 원하는 것을 정확히 수행 할 수있는 다음 코드를 가지고있다. 나는 특히 UI 속성을 사용하여 UI 뷰를 사용하는 대신 앱의 특성상 이러한 UI 요소를 구체적으로 타겟팅해야했습니다.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 
    } 
} 

나는 그것을 최적화하고 싶다. 그러나 나는 그것을 그대로두고 몇 시간을 낭비했다. 원래 배열에 다양한 UI 이름을 넣는 for 루프를 시도했지만, 내가 시도한 것에 관계없이 문자열을 제대로 통과하지 못하고 .alpha가 String의 멤버가 아니라고 주장했습니다.

영향을 줄 각 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 } }