Можно ли добавить изображение в CGFloat - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь создать индикатор прогресса, который идет от 0% до 100%.Когда прогресс достигает 100%, я бы хотел, чтобы он уменьшился с процента до изображения, такого как галочка.Я устанавливаю этот индикатор выполнения как CAShapeLayer, и внутри него я хотел бы, чтобы изображение появилось после того, как оно достигнет 100. Я вижу эту анимацию, выполненную в различных приложениях, и мне интересно, возможно ли это сделать в Xcode.Я пытался сделать это путем преобразования изображения в CAShapeLayer, но это не удается из-за ошибки компилятора:

Не удается преобразовать значение типа 'UIImage?'к ожидаемому типу аргумента 'String'

Я использовал приведенный ниже код, но он показывает только процент загрузки.это возможно сделать?

  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 голосов
/ 21 ноября 2018

Во-первых, причина получения сообщения об ошибке Cannot convert value of type 'UIImage?' to expected argument type 'String':

Это потому, что в последней строке (UIImage(named: tick)) в вашем фрагменте вы пытаетесь инициализировать UIImage с константой UIImage отметьте , что вы инициализировали двумя строками ранее.


То, что вы пытаетесь выполнить, возможно, но способ, которым вы пытаетесь это сделать, не будет работать.Чтобы помочь вам в этом, вы должны показать, как настроен ваш пользовательский интерфейс.

Возможное решение: встроить вашу процентную метку в UIStackView.Добавьте UIImageView к стековому представлению тоже.Установите этот ImageView, чтобы показать желаемое изображение, и установите для свойства isHidden imageView значение true.Когда ваш прогресс достигнет 100%, сделайте следующее:

percentageLabel.isHidden = true
imageView.isHidden = false
...