2016-07-07 10 views
0

원하는 항목 : Viewcontroller를 호출 한 후에 배경을 제외하고이 ViewController의 모든 요소를 ​​페이드하고 싶습니다. 배경은 있어야합니다.알파를 다시 1.0으로 설정 한 후에 버튼/레이블/아무 것도 다시 나타나지 않습니다.

어떤 문제가 생깁니 까? 내 코드에서 볼 수 있듯이, 어떤 것이 희미 해지면 먼저 제거해야합니다. 제거 부분은 잘하고 있습니다. 그러나 다시 나타나기를 원할 때 아무 일도 일어나지 않습니다. 인쇄 기능을 사용하여 임의의 레이블의 알파를 볼 때 1.0으로 설정됩니다. 내가 뭘 잘못하고 있는지 알 수 없다.

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 
    Removeeverything() 
    Fadein() 
} 

func Removeeverything() { 
    for view in self.view.subviews as [UIView] { 
     if let btn = view as? UIButton { 
      UIView.animateWithDuration(0.0, delay: 0.0, options: UIViewAnimationOptions.CurveEaseOut, animations: { 

       btn.alpha = 0.0 

       }, completion: nil) 
     } 
    } 
    for view in self.view.subviews as [UIView] { 
     if let btn = view as? UILabel { 
      UIView.animateWithDuration(0.0, delay: 0.0, options: UIViewAnimationOptions.CurveEaseOut, animations: { 

       btn.alpha = 0.0 

       }, completion: nil) 
     } 
    } 
    for view in self.view.subviews as [UIView] { 
     if let btn = view as? UIImageView { 
      UIView.animateWithDuration(0.0, delay: 0.0, options: UIViewAnimationOptions.CurveEaseOut, animations: { 

       btn.alpha = 0.0 

       }, completion: nil) 
     } 
    } 
} 

func Fadein() { 
    Backgrond.alpha = 1.0 
    for view in self.view.subviews as [UIView] { 
     if let btn = view as? UIButton { 
      UIView.animateWithDuration(1.0, delay: 0.0, options: UIViewAnimationOptions.CurveEaseIn, animations: { 

       btn.alpha = 1.0 

       }, completion: nil) 
     } 
    } 
    for view in self.view.subviews as [UIView] { 
     if let btn = view as? UILabel { 
      UIView.animateWithDuration(1.0, delay: 0.0, options: UIViewAnimationOptions.CurveEaseIn, animations: { 

       btn.alpha = 1.0 

       }, completion: nil) 
     } 
    } 
    for view in self.view.subviews as [UIView] { 
     if let btn = view as? UIImageView { 
      UIView.animateWithDuration(0.7, delay: 0.0, options: UIViewAnimationOptions.CurveEaseIn, animations: { 

       btn.alpha = 1.0 

       }, completion: nil) 
     } 
    } 

} 

답변

0

나는 문제가 UIView.animateWithDuration 비동기 실행 있다는 것을 말할 것 (즉 - removeEverything()의 애니메이션이 완료하기 전에 fadeIn() 기능이 실행됩니다).

Removeeverything()에서 UIView.animateWithDuration 수술을 삭제하면됩니다. duration 인수를 0.0으로 설정 했으므로 아무 것도 변경되지 않습니다 (코드가 작동해야 함을 제외하고)

func removeEverything() { 
    for v in view.subviews.filter({ $0 is UIButton || $0 is UILabel || $0 is UIImageView }) { 
     v.alpha = 0 
    } 
} 

func fadeIn() { 
    // Background.alpha = 1.0 
    UIView.animateWithDuration(1.0, delay: 0, options: .CurveEaseIn, animations: { 
     for v in view.subviews.filter({ $0 is UIButton || $0 is UILabel }) { 
      v.alpha = 1 
     } 
    }, completion: nil) 
    UIView.animateWithDuration(0.7, delay: 0, options: .CurveEaseIn, animations: { 
     for v in view.subviews.filter({ $0 is UIImageView }) { 
      v.alpha = 1 
     } 
    }, completion: nil) 
} 

코드 스 니펫이 예상대로 작동해야합니다. 배열에 filter 함수를 사용하고 코드를 더 읽기 쉽게하기 위해 불필요한 캐스트 두 개를 제거했습니다. 희망이 도움이됩니다!

+0

이렇게하면 코드를 정리하는 데 도움이됩니다. 감사합니다. 단, 초가 끝난 후에는 사라집니다. (여기서 초는 1.0과 0.7입니다.) 나는 10 초를 테스트했습니다. 페이드 인되어 10 초 이내에 자동으로 페이드 아웃됩니다. 우리는 잘못된 애니메이션을 사용하고 있습니까? – Nahaku

+0

지금 작동합니다. 일부 이미지가 작동하지 않는다고 생각합니다 ... 정말 고마워요! – Nahaku

0

그냥 생각이 0.01을 같은 unrecognizably 낮은 일에 알파를 설정하는 것이 아니라 전체를 제거 시도했다 :

이 내 코드는? 또한 버튼의 색상을 배경과 일치시킨 다음 다시 원래대로 되돌릴 수도 있습니다.

또한 self.background.alpha 나 또한

view.background.alpha, 당신이해야 정말 낙타 경우 함수 이름을 호출 할 필요가 있습니다.