UIView Переход и DispatchQueue.main.async проблема синхронизации (в tableViewController) - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь создать табличное представление, которое заполняет начальное представление в иллюзии «в реальном времени», где каждая ячейка переворачивается, а затем отображается ее значение (в отличие от простого отображения по умолчанию). Я возился с этим уже много часов и не могу понять, как создать задержку между тем, когда происходит переворот, и когда отображается метка.

Я использую значение isHidden меток, чтобы определить, когда они отображаются. Когда переход происходит после того, как я пытаюсь изменить isHidden на true, но кажется, что я могу отображать значение только до того, как будет выполнен переход, если я не использую обработчик завершения или с обработчиком завершения анимацию не показывает вообще. Раздел моего кода показан ниже:

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    guard let cell = tableView.dequeueReusableCell(withIdentifier: "testCell3", for: indexPath) as? FlipTableViewCell
        else{
            fatalError("The dequeued cell is not an instance of AnimationTableViewCell.")
    }
    cell.flipLabel.text = String(array[indexPath.row])

    if(firstLoad){

        cell.isHidden = true
    }

    return cell
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)


    firstLoad = false


    var delay:Double = 0

    for cell in self.tableView.visibleCells{



            DispatchQueue.main.asyncAfter(deadline: .now() + 0.05*delay) {

                UIView.transition(with: cell.contentView, duration: 0.8, options: .transitionFlipFromTop, animations: nil, completion:{ doneWork in
                        if doneWork {

                            let cellTest = cell as? FlipTableViewCell
                            cellTest?.isHidden = false
                        }
                    })
            }

        delay = delay + 1

    }

}


    override func viewWillAppear(_ animated: Bool){
    super.viewWillAppear(animated)
    tableView.reloadData()
}

Вот TableViewCell:

класс FlipTableViewCell: UITableViewCell {

@IBOutlet weak var flipLabel: UILabel!
override func awakeFromNib() {
    super.awakeFromNib()
    flipLabel.isHidden = false
    flipLabel.alpha = 1
    // Initialization code
}

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}

}

...