Fade In и Fade out в анимации Swift

У меня есть UIImageView с анимацией, и в UIView я применяю эффект fadeIn, но мне нужно применить постепенное исчезновение, когда UIImageView, который анимируется, когда его касают.

Это то, что я делаю, чтобы исчезнуть.

UIView.animateWithDuration(0.5, delay: delay, 
    options: UIViewAnimationOptions.CurveEaseOut, animations: {
        uiImageView.alpha = 1.0
        }

Ответы

Ответ 1

Это то, что я бы сделал, основываясь на моих исследованиях: (Предположим, вы используете раскадровку)

  1. Перейдите в UIImageView и под Атрибутами установите флажок "Взаимодействие с пользователем включено".

  2. Перетащите TapGestureRecognizer поверх представления изображения.

  3. Нажмите "Жест касания" и перетащите, чтобы выполнить действие на вашем ViewControler.swift.

  4. Добавьте следующий код внутри:

    UIView.animate(withDuration: 0.5, delay: 0.5, options: .curveEaseOut, animations: {
        self.uiImageView.alpha = 0.0
    }, completion: nil) 
    

Тогда все готово!

Ответ 2

Начиная с iOS 10 Apple запустила новый SDK для iOS Animations, который намного более мощный, особенно в отношении функций таймингов и интерактивности.

Затухать код с помощью этого подхода будет:

UIViewPropertyAnimator(duration: 0.5, curve: .easeOut, animations: {
    self.uiImageView.alpha = 0.0
}).startAnimation()

Чтобы получить более подробную информацию об объекте Animator, просмотрите демо-версию iOS 10 Animations.

Ответ 3

Swift 4. Добавить функцию Fade in и угасать объект UIView

extension UIView {

    func fadeIn(_ duration: TimeInterval = 0.5, 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 = 0.5, delay: TimeInterval = 1.0, completion: @escaping (Bool) -> Void = {(finished: Bool) -> Void in}) {
        UIView.animate(withDuration: duration, delay: delay, options: UIViewAnimationOptions.curveEaseIn, animations: {
            self.alpha = 0.3
    }, completion: completion)
   }
}

пример

label.fadeIn()

label.fadeOut()

imageView.fadeOut(completion: {
    (finished: Bool) -> Void in
    imageView.removeFromSuperview()
})

label.fadeIn(completion: {
    (finished: Bool) -> Void in
    label.text = "Changed!"
})

Ответ 4

Swift 5

Это хорошо сработало для меня. Я хотел анимировать лейбл с продолжением появления/исчезновения. Я поместил метку внутри "cardHeaderView".

@IBOutlet weak var cardHeaderView: UIView!

Поместите это в "viewDidAppear". Я пошел с нулевой задержкой, чтобы анимация началась сразу.

fadeViewInThenOut(view: cardHeaderView, delay: 0)

Вот функция.

func fadeViewInThenOut(view : UIView, delay: TimeInterval) {

    let animationDuration = 1.5

    UIView.animate(withDuration: animationDuration, delay: delay, options: [UIView.AnimationOptions.autoreverse, UIView.AnimationOptions.repeat], animations: {
        view.alpha = 0
    }, completion: nil)

}