@foma24
QA Engineer

Как сделать анимацию для UIImageView?

Есть простенький код - при нажатии кнопки появляется изображение орла или решки.
@IBAction func buttonCoin(_ sender: UIButton) {
        let coinSide = arc4random_uniform(2)
        if coinSide == 0 {
            labelResult.text = "Tail"
            imageCoin.image = UIImage(named: "tail")

        }else{
            labelResult.text = "Head"
            imageCoin.image = UIImage(named: "head")
        }
     
    }


1. Как сделать анимацию, чтобы при нажатии кнопки изображение появлялось (например растягивалось из уменьшенного в полный размер или из прозрачного становилось видимым)

2. Как сделать анимацию, чтобы при нажатии кнопки изображения несколько раз менялись иммитируя переворот монеты, а затем появлялся бы результат
  • Вопрос задан
  • 869 просмотров
Решения вопроса 1
Tehdrew
@Tehdrew
iOS Developer
1.
Scale изображения

imageView.transform = CGAffineTransform(scaleX: 0.1, y: 0.1)

UIView.animate(withDuration: 0.6,
    animations: { [weak self] in
        self?.imageView.transform = .identity
    })


Появление изображения
imageView.alpha = 0.0

UIView.animate(withDuration: 0.6,
    animations: { [weak self] in
        self?.imageView.alpha = 1.0
    })


2. Функция для вращения UIImageView, Outlet будет в данном примере называться 'imageBackground'.
private let animationRepeatDuration: CFTimeInterval = 2.0
private let rotationAnimatonKey: String = "rotationAnimation"

func animate(completion: @escaping () -> Void) {
        
        CATransaction.begin()
        
        CATransaction.setCompletionBlock { [weak self] in
            
            guard
                let rotationAnimatonKey = self?.rotationAnimatonKey,
                self?.imageBackground.layer.animation(forKey: rotationAnimatonKey) != nil
                else {
                completion()
                return
            }
        }
        
        let rotation: CABasicAnimation = CABasicAnimation(keyPath: "transform.rotation.y")
        rotation.toValue = NSNumber(value: Double.pi * 2)
        rotation.repeatCount = Float.greatestFiniteMagnitude
        rotation.repeatDuration = animationRepeatDuration
        imageBackground.layer.add(rotation, forKey: rotationAnimatonKey)
        
        CATransaction.commit()
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы