gpt4 book ai didi

ios - 如何在 iOS 上显示动画之前正确设置网络超时?

转载 作者:行者123 更新时间:2023-11-30 12:00:48 24 4
gpt4 key购买 nike

正如标题所示,我的应用程序有问题。让我更详细地解释一下我想要使用项目符号列表实现的目标:

  • 应用会加载主菜单并连接到 Firebase 以查看是否有一些产品可供显示
  • 下载产品图片
  • 对内容进行动画处理以显示产品信息和图片

我创建了函数来处理连接不起作用或产品不存在的情况。问题是在动画开始之前(大约 2 秒)连接速度太慢而无法加载图像。在这种情况下,应用程序会卡住一点,并且产品将在动画结束之前显示。

加载代码

override func viewDidLoad() {
super.viewDidLoad()

// The view where the product will be shown
self.productView.alpha = 0.0

// Checks the internet connection
if (ConnectionService.isConnectedToNetwork()) {
fetchDataFromDatabase(downloadCompleted: { (productToShow) in
self.fillPromoView(usingProduct: productToShow)
})
} else {
fillPromoView(nil)
}
}

出现代码

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

UIView.animate(withDuration: 0.5, delay: 2.0, options: UIViewAnimationOptions.curveEaseInOut, animations: {
...
}
}

这里是下载产品图片的代码:

func fetchDataFromDatabase(downloadCompleted: @escaping ((Product?) -> Void)) {
FirebaseService.instance.getProductList { (productList) in
if (productList.count != 0) {
do {
let productImage = try Data(contentsOf: productList.productImage as URL)

// Fill the IBOutlet with the downloaded image
self.promoProductImg.image = UIImage(data: productImage)

downloadCompleted(productList)
} catch {
downloadCompleted(nil)
}
} else {
downloadCompleted(nil)
}
}
}

我的目标是在下载状态收到响应或因为连接下载图像需要 2 秒以上时启动动画。有什么建议吗?

最佳答案

无论您是否有来自 FireBase 的响应,您在 viewDidAppear 中的代码都会触发。

在抽象级别,您需要让应用程序知道您何时加载了数据(或未加载)

最简单的方法是;

  1. 拥有产品详细信息页面的“骨架”模板 ( here is an example of Facebooks version of it, see the first gif )
  2. 将 View 动画代码从 viewDidAppear 移出并移至其自己的专用函数中。
  3. 通过 NSNotificationCenter 调用此函数在 fetchDataFromDatabase 的成功部分内(通过此通知范例,您将在 fetchDataFromDatabase 函数中“触发”通知,并且您的 viewController 将“监听”此通知并做出响应相应地(在本例中,通过在 View 中设置动画并呈现数据”))

关于ios - 如何在 iOS 上显示动画之前正确设置网络超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47268453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com