#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")
}
Спасибо