是否可以将图像添加到CGFloat

时间:2018-11-21 06:57:41

标签: uiimage layer cashapelayer

我正在尝试创建一个进度条,其范围从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")
}

percentage label that I want to change when reached 100%

感谢您解释是否可以提前完成。

1 个答案:

答案 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