uiview.animate перестал работать при добавлении второго viewcontroller в раскадровке

#ios #swift

#iOS #swift

Вопрос:

Я создал простую анимацию, показывающую пульсирующую монету, и она работала довольно хорошо, пока я не добавил viewcontroller перед тем, у которого есть анимация на раскадровке.

Я хотел, чтобы в моей игре был экран меню, прежде чем показывать экран с этой анимацией.

Это код анимации:

 let imageView: UIImageView = coinImageView[0]

UIView.animate(withDuration: 0.5, 
                delay: 0.1, 
                options: [
                    .repeat, 
                    .autoreverse, 
                    .curveEaseIn, 
                    .allowUserInteraction
                ], 
                animations: { 
                    imageView.transform = CGAffineTransform(scaleX: 1.5, y: 1.5) 
                }
)

  

Первый вид (с меню) выглядит следующим образом:

 class MenuViewController: UIViewController {

        @IBAction func newGameButton(_ sender: Any) {
            let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewController") as! ViewController
            self.present(viewController, animated: true, completion: nil)
            viewController.newGame()
        }
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}
  

и второй viewcontroller (тот, что с анимацией) выглядит следующим образом:

     class ViewController: UIViewController, SavingViewControllerDelegate, UICollectionViewDelegate, UICollectionViewDataSource {
        var coinImageView: [UIImageView] = []

func grantCoins(n: Int) {
        let coinCount = coin.count
        for i in coinCount...(coinCount n) {
            coin.append(UIImage(named: "coin.png")!)
            coinImageView.append(UIImageView(image: coin[i]))
            coinImageView[i].isUserInteractionEnabled = true
            coinImageView[i].addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(self.handlePan(_:))))
            coinImageView[i].frame = CGRect(x: 147, y: -100, width: 60, height: 60)
            view.addSubview(coinImageView[i])
            
            let finalPoint = CGPoint(
                 x: 177,
                 y: 278
               )
            generateNewCoin(gestureView: coinImageView[i])
        }
        view.bringSubviewToFront(coinImageView[0])
    }
    
        func newGame() { 
            animateFirstCoin()
        }
    
        func animateFirstCoin() {
            let imageView: UIImageView = coinImageView[0]
    
            UIView.animate( 
                withDuration: 0.5,
                delay: 0.1,
                options: [.repeat, .autoreverse, .curveEaseIn, .allowUserInteraction],
                animations: {
                    imageView.transform = CGAffineTransform(scaleX: 1.5, y: 1.5)
            })
        }
    }
  

Есть ли какое-либо очевидное объяснение проблемы?

Комментарии:

1. Откуда вы заполняете поле coinImageView?

2. Хороший вопрос, я обновил описание своей проблемы.

Ответ №1:

После дня бесплодных исследований я наконец нашел его. Когда были сгенерированы первые монеты, представление еще не было видно, анимация не работала. Другая партия монет была анимирована нормально. Я просто поместил этот код в свою функцию, чтобы проверить это:

 if (view.window == nil) {
    print("view is not visible")
} else {
    print("view is visible")
}
  

Спасибо