在UICollectionView didSelectItemAt上调用主线程

时间:2016-11-28 21:13:49

标签: ios uicollectionview swift3 grand-central-dispatch

我使用UICollectionView,当用户点击某个单元格时,会运行一个特定的流程。由于此过程可能需要几秒钟,因此我希望在此过程即将开始时立即向用户显示一些处理消息。

总体思路如下:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    DispatchQueue.main.async {
        self.someView.isHidden = false
        print("showing processing message is about to start")
    }

    // some process runs here which may take a few seconds to finish

    DispatchQueue.main.async {
        self.someView.isHidden = true
        print("hidding processing message")
    }

}

由于某些未知原因,对主线程的调用是在didSelectItemAt完全完成后执行的,因此处理消息几乎在它出现的同时消失。

有人知道我在这里缺少什么吗?

谢谢:)

1 个答案:

答案 0 :(得分:1)

您在问题中描述的内容似乎正常,因为您在主线程上调用了事件free(a->array[0]) ,因此您输入的代码已被截断。

如果您希望在完成流程时隐藏someView,最好在someView someView期间隐藏someView在您打算运行的流程的完成时关闭没有隐藏。