Fade In и Fade out в анимации Swift
У меня есть UIImageView с анимацией, и в UIView я применяю эффект fadeIn, но мне нужно применить постепенное исчезновение, когда UIImageView, который анимируется, когда его касают.
Это то, что я делаю, чтобы исчезнуть.
UIView.animateWithDuration(0.5, delay: delay,
options: UIViewAnimationOptions.CurveEaseOut, animations: {
uiImageView.alpha = 1.0
}
Ответы
Ответ 1
Это то, что я бы сделал, основываясь на моих исследованиях: (Предположим, вы используете раскадровку)
-
Перейдите в UIImageView и под Атрибутами установите флажок "Взаимодействие с пользователем включено".
-
Перетащите TapGestureRecognizer поверх представления изображения.
-
Нажмите "Жест касания" и перетащите, чтобы выполнить действие на вашем ViewControler.swift.
-
Добавьте следующий код внутри:
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)
}