2016-07-07 4 views
0

Что я хочу: после вызова Viewcontroller я хочу исчезать во всех моих элементах в этом Viewcontroller, за исключением фона. Фон должен оставаться.Никаких кнопок/ярлыков/ничего не появится после того, как я установил alpha back to 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 выполняется асинхронно (то есть - ваша fadeIn() функция будет выполняться до анимации в removeEverything() завершены).

Просто удалите операции UIView.animateWithDuration с вашего Removeeverything(). Так как вы установили длительность аргумент 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, а не удаляя их полностью? Вы также можете попробовать сопоставить цвет кнопки с фоном и затем погасить его таким образом.

Вам также может понадобиться вызвать self.background.alpha или view.background.alpha

Кроме того, вы должны действительно верблюжьей случае, если ваши имена функций.