Я пытаюсь создать собственный класс представления, который представляет собой всплывающее окно с UICollectionView. Я создал функции для анимации входа и выхода, но на самом деле работает только функция анимации выхода.
Я устанавливаю ограничения следующим образом...
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
func commonInit(){
...
self.addSubview(collectionView)
collectionView.bottomAnchor.constraint(equalTo: self.safeAreaLayoutGuide.bottomAnchor).isActive = true
collectionView.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
collectionView.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true
collectionView.heightAnchor.constraint(equalTo: self.heightAnchor, multiplier: 0.7).isActive = true
...
self.animateIn()
}
Затем для обработки анимации я использую следующее...
func animateIn(){
self.collectionView.transform = CGAffineTransform(translationX: 0, y: self.collectionView.frame.height)
self.blurredBackgroundView.alpha = 0
UIView.animate(withDuration: 0.5, animations: {
self.blurredBackgroundView.alpha = 1
self.collectionView.transform = .identity
})
}
И функция animateOut (которая работает)...
func animateOut(){
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 1, options: .curveEaseIn, animations: {
self.collectionView.transform = CGAffineTransform(translationX: 0, y: self.collectionView.frame.height)
self.blurredBackgroundView.alpha = 0
}) { (complete) in
if complete {
self.removeFromSuperview()
}
}
}
Но первоначальный CGAfineTransform не работает, поэтому представление появляется в своей конечной позиции, когда оно появляется впервые. Я сбит с толку, так как он отлично работает для функции animateOut, которая вызывается при нажатии кнопки, чтобы закрыть всплывающее окно.
Может ли кто-нибудь сказать мне, что я делаю неправильно? Я чувствую, что должно быть что-то основное, чего мне не хватает.
Спасибо
commonInit
? - person mag_zbc   schedule 14.07.2020