ios - 视图加载时如何防止按钮出现瞬间
问题描述
所以我的目标是顺利加载 viewController 没有瞬间错误。我有一个函数,用于确定在基于 Firestore 文档中的字段加载视图时要显示哪些按钮。这是功能:
func determinePurchasedStatusVerification() {
db.collection("student_users/\(user?.uid)/events_bought").whereField("event_name", isEqualTo: selectedEventName!).whereField("isEventPurchased", isEqualTo: true).getDocuments { (querySnapshot, error) in
if let error = error {
print("\(error)")
} else {
guard let querySnap = querySnapshot?.isEmpty else { return }
if querySnap == true {
self.purchaseTicketButton.isHidden = false
self.viewPurchaseButton.isHidden = true
self.cancelPurchaseButton.isHidden = true
} else {
self.purchaseTicketButton.isHidden = true
self.viewPurchaseButton.isHidden = false
self.cancelPurchaseButton.isHidden = false
}
}
}
}
我在 vc 中调用了这个函数,viewWillAppear()
但是当我实例化到那个 vc 时,这就是结果......
额外的购票按钮会出现一瞬间。即使它非常快,您仍然可以看到它,这不是用户需要看到的。当您单击未购买的单元格时,反之亦然,底部的两个按钮会出现片刻。我只是想知道如何防止这个快速错误,并能够在按钮隐藏中没有延迟地显示平滑的转场。谢谢。
解决方案
getDocuments
是一个异步函数,这意味着它不会立即调用它的回调函数——它会在从服务器取回数据时调用它。仅仅因为您的 Internet 连接速度很快而且 Firebase 服务器的速度肯定很快,这似乎只是一瞬间,但这肯定是一个非零时间。而且,连接速度较慢的人可能会经历更多的延迟。
除非你的回调被调用了两次,结果不同(这似乎值得怀疑),这里唯一的解决方案是确保你的初始状态隐藏了所有按钮(可能还有一个加载指示器),然后显示你想要的按钮一次你得到了数据(就像你现在一样)。不过,我的猜测是,您有一个按钮可见的初始状态,这会导致闪烁。
推荐阅读
- java - 缩放时画布不在手指位置上绘制
- python - 在链表的尾部插入元素,Python 3 hackerrank
- python - 在 Anaconda 中更新 Statsmodels
- python - 使用 matplotlib.animation.FuncAnimation 一次只显示一帧
- c - 从用户输入 n 显示结果 n 次
- r - 如果给定年份的所有观测值都是 NA,如何删除面板数据中的变量?
- javascript - 如何在three.js中获取VR头显的位置
- c++ - 如何使用 stl 迭代器和队列来实现图的广度优先遍历?
- android - 如何使用 pub sub push 实现 JWT
- sql-server - 如何返回执行结果和总行数