Вращающаяся анимация показывается только в финальной позиции iOS swift - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь реализовать пользовательский индикатор активности, который представляет собой простой вращающийся UIImageView. У меня есть следующий код

import Foundation
import UIKit

class CatSpinnerAnimation: UIView {

let catImageView: UIImageView = {
    let catImageView = UIImageView()
    catImageView.image = UIImage(named: "CatDateIcon-1024")
    catImageView.translatesAutoresizingMaskIntoConstraints = false
    return catImageView
}()

func startRotating(superView: UIView) {
    superView.addSubview(catImageView)
    UIApplication.shared.beginIgnoringInteractionEvents()
    catImageView.centerXAnchor.constraint(equalTo: superView.centerXAnchor).isActive = true
    catImageView.centerYAnchor.constraint(equalTo: superView.centerYAnchor).isActive = true
    catImageView.widthAnchor.constraint(equalToConstant: 50).isActive = true
    catImageView.heightAnchor.constraint(equalToConstant: 50).isActive = true



    let rotate = CGAffineTransform(rotationAngle: CGFloat.pi)

    UIView.animate(withDuration: 5.0) {
        self.catImageView.transform = rotate
    }

}



func stopRotating(superView: UIView) {
    UIApplication.shared.endIgnoringInteractionEvents()
    catImageView.removeFromSuperview()

}
}

В моих ViewControllers я создаю экземпляр этого класса и вызываю его функцию

    let catSpinnerAnimation = CatSpinnerAnimation()
    catSpinnerAnimation.startRotating(superView: view)

Но это вообще не показывает вращающуюся анимацию, только мой ImageView в конечном положении (повернут на 189 градусов). Я пробовал много типов анимации, но все еще не получил необходимого результата. Буду признателен за любое объяснение правильного поведения вращающихся анимаций

1 Ответ

0 голосов
/ 16 января 2019

Я думаю, вам может понадобиться сначала добавить представление в иерархию представлений, прежде чем вы сможете его анимировать. Попробуйте перевести ваш звонок на UIView.animate() на звонок на DispatchQueue.main.asyncAfter(deadline: .now() + .01) {}

Это позволило бы вашему представлению быть добавленным в иерархию представлений и визуализироваться до отправки анимации.

...