UIView Transition和DispatchQueue.main.async计时问题(在tableViewController中)

时间:2018-05-04 01:19:59

标签: ios iphone swift uitableview asynchronous

我正在尝试创建一个表格视图,用幻觉填充初始视图" realtime"每个单元格翻转然后显示其值(而不是默认显示)。我一直在修补这个问题好几个小时,似乎无法弄清楚如何在翻转发生和标签显示之间产生延迟。

我使用标签的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:

class 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
}

}

0 个答案:

没有答案