Я анимирую UIView из другого класса, но я получаю разные результаты от каждого и надеюсь, что кто-нибудь сможет объяснить почему. Когда я запускаю EditSongLauncher из handleEdit1, 4 ячейки коллекции не отображаются. Однако, когда я запускаю EditSongLauncher из handleEdit2, я получаю все 4 ячейки, показывая.
Я не понимаю, почему handleEdit1 не работает, поскольку, по сути, он делает то же самое, когда вызывает setupViews () ... Я бы предпочел использовать handleEdit1, так как он позволяет более чистый код, поэтому надеялся, что кто-нибудь сможет объяснить, почему или скажите мне, почему 4 клетки не появляются для этой функции.
@objc func handleEdit1() {
let editLauncher = EditSongLauncher()
editLauncher.setupViews()
}
@objc func handleEdit2() {
if let window = UIApplication.shared.keyWindow {
let editLauncher = EditSongLauncher.init(frame: CGRect(x: 0, y: 0, width: collectionView.frame.width, height: collectionView.frame.height))
window.addSubview(editLauncher)
}
}
class EditSongLauncher: UIView, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
let cellId = "cellId"
let dimmedView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(white: 0, alpha: 0.5)
view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleSave(sender:))))
view.isUserInteractionEnabled = true
return view
}()
let collectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
let cv = UICollectionView(frame: .zero, collectionViewLayout: layout)
cv.backgroundColor = .white
return cv
}()
func setupViews() {
if let window = UIApplication.shared.keyWindow {
let height: CGFloat = 400
let y = window.frame.height - height
collectionView.frame = CGRect(x: 0, y: window.frame.height, width: window.frame.width, height: height)
dimmedView.frame = window.frame
dimmedView.alpha = 0
window.addSubview(dimmedView)
window.addSubview(collectionView)
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {
self.dimmedView.alpha = 1
self.collectionView.frame = CGRect(x: 0, y: y, width: self.collectionView.frame.width, height: self.collectionView.frame.height)
}, completion: nil)
}
}
@objc func handleSave(sender: UITapGestureRecognizer) {
print("Handling save")
UIView.animate(withDuration: 0.5) {
self.dimmedView.alpha = 0
}
}
override init(frame: CGRect) {
super.init(frame: frame)
collectionView.dataSource = self
collectionView.delegate = self
collectionView.register(EditSongCell.self, forCellWithReuseIdentifier: cellId)
setupViews()
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 4
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath)
cell.backgroundColor = .blue
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: frame.width, height: 50)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}