我正在尝试创建一个进度条,其范围从0%-100%开始。当进度达到100%时,我希望它从百分比逐渐消失到诸如复选标记之类的图像。我将进度条设置为CAShapeLayer,并在其中进行设置,我希望图像在达到100后显示。我看到此动画在各种应用程序中都完成了,我想知道是否可以在Xcode中进行。我试图通过将图像转换为CAShapeLayer来做到这一点,但由于编译器错误而失败:
无法转换“ UIImage”类型的值?到预期的参数类型“字符串”
我使用了下面的代码,但只显示了加载百分比。 有可能做到吗?
private func beginDownloadingFile() {
print("Attempting to download file")
shapeLayer.strokeEnd = 0
let configuration = URLSessionConfiguration.default
let operationQueue = OperationQueue()
let urlSession = URLSession(configuration: configuration, delegate: self, delegateQueue: operationQueue)
guard let url = URL(string: urlString) else { return }
let downloadTask = urlSession.downloadTask(with: url)
downloadTask.resume()
}
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
let percentage = CGFloat(totalBytesWritten) / CGFloat(totalBytesExpectedToWrite)
DispatchQueue.main.async {
self.percentageLabel.text = "\(Int(percentage * 100))%"
self.shapeLayer.strokeEnd = percentage
AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
}
print(percentage)
}
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
print("Finished downloading file")
}
感谢您解释是否可以提前完成。
答案 0 :(得分:0)
首先,获得错误消息Cannot convert value of type 'UIImage?' to expected argument type 'String'
的原因:
这是因为在您的代码段的最后一行(UIImage(named: tick)
中,您尝试使用您早先初始化了两行的UIImage常量 tick 来初始化UIImage。
您可以尝试完成什么,但是您尝试的方式将无法工作。 为了帮助您解决此问题,您应该展示如何设置用户界面。
可能的解决方案:
将您的percentLabel嵌入UIStackView中。也将UIImageView添加到stackview。设置此ImageView以显示所需的图像,并将imageView的isHidden
属性设置为true
。
当进度达到100%时,请执行以下操作:
percentageLabel.isHidden = true
imageView.isHidden = false