Может кто-нибудь объяснить, почему мои ячейки CollectionView появляются только в этом сценарии? - PullRequest
0 голосов
/ 26 июня 2019

Я анимирую 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")
}
}
...