У меня есть collectionview
с полноэкранным cells
, и он автоматически прокручивается один за другим. Я хочу добавить анимацию в ячейку imageView
. Но я хочу, чтобы анимация начиналась после завершения автоматической прокрутки. Я попробовал код ниже, но он работает только для первой ячейки.Анимация изображения в ячейке коллекции после его появления
Я вызываю функцию анимации в этой строке cell.alpImage.getBiggerAnim()
. Но, как я уже говорил, он работает только для первой ячейки.
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = myCollectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! AlphabetCollectionViewCell
if (indexPath.item >= alpImageArray.count - 1) {
cell.alpImage.isHidden = true
cell.startAgain.isHidden = false
cell.readyLabel.isHidden = true
cell.startAgain.addTarget(self, action: #selector(startAgainPressed), for: .touchUpInside)
} else if (indexPath.item == 0) {
cell.readyLabel.isHidden = false
cell.alpImage.isHidden = true
} else {
cell.startAgain.isHidden = true
cell.readyLabel.isHidden = true
cell.alpImage.isHidden = false
cell.alpImage.image = UIImage(named: alpImageArray[indexPath.row] + ".png")
}
cell.alpImage.getBiggerAnim()
return cell
}
Эти функции, управляет автоматической прокруткой:
func scrollToNextCell(){
let cellSize = CGSize(width: self.view.frame.width, height: self.view.frame.height)
let contentOffset = myCollectionView.contentOffset
width: cellSize.width, height: cellSize.height), animated: true)
alphabetSoundPlay()
}
var myTimer: Timer?
func startTimer() {
myTimer = Timer.scheduledTimer(timeInterval: 3.0,
target: self,
selector: #selector(scrollToNextCell),
userInfo: nil,
repeats: true)
}
Это мое расширение анимации:
extension UIView {
func getBiggerAnim() {
UIView.animate(withDuration: 0.6 , animations: {
self.transform = CGAffineTransform(scaleX: 0.6, y: 0.6)
},completion: { finish in
UIView.animate(withDuration: 0.6){
self.transform = CGAffineTransform.identity
}
})
}
}
Вы не должны вызывать метод анимации в 'cel lForItem', он получает вызов до завершения прокрутки. Что вы можете сделать, это вызвать его в обратном вызове UScrollViewDelegate 'scrollViewDidEndDecelerating'. Однако вам нужно выяснить, какая ячейка видна. – ovejka
пытался вызвать 'getBiggerAnim' в основной теме? –