forEach循环上的进度条迅速

问题描述 投票:0回答:2

我将如何测量forEach循环的进度并将其显示在进度栏中?我将旋转垂直图像以使其变为水平。每次要转换的图像数量都会不同。

这里是我进行的转换图像的工作,我只需要一种向用户显示进度的方法:

func rotateandSave(files: [URL]) {
    files.forEach { file in
        let path = file
        let image = NSImage(contentsOf: path)
        let rotatedImage = image?.rotated(by: rotateAngle)
        saveImage(image: rotatedImage!, destination: path)
    }
}
swift macos nsimage nsprogressindicator
2个回答
0
投票

您可以将ProgressView用于简单的进度条。您可以像其他视图一样将其添加到视图控制器中(作为@IBOutlet弱变量)。在viewDidLoad()中,将进度设置为0,以使栏开始为空。

ProgressView的进度设置在0.0-1.0的范围内,并且可以设置动画选项(我想您希望这样做)。要更新ProgressView,您可以修改现有功能:

@IBOutlet weak var progressView: UIProgressView!
...    
func rotateandSave(files: [URL]) {
    let numFiles = files.count
    let fileNum = 0
    files.forEach { file in
        let path = file
        let image = NSImage(contentsOf: path)
        let rotatedImage = image?.rotated(by: rotateAngle)
        saveImage(image: rotatedImage!, destination: path)
        progressBar.setProgress(Double(fileNum)/Double(numFiles), true)
        fileNum += 1
    }
}

0
投票

您可以使用ProgressView显示进度条。您可以将其添加到您的控制器,如下所示:

@IBOutlet weak var progressView: UIProgressView!
override func viewDidLoad() {
        super.viewDidLoad()
        progressView.progress = 0.0
} 

func rotateandSave(files: [URL]) {

    var numberOfFile = files.count
    var fileCounter = 0
    files.forEach { file in
        let path = file
        let image = NSImage(contentsOf: path)
        let rotatedImage = image?.rotated(by: rotateAngle)
        saveImage(image: rotatedImage!, destination: path)
        fileCounter + =1
        let progress = (Double(fileCounter)/Double(numberOfFile))
        progressView.setProgress(progress, animated: true)
    }
}

此时,当progressView的进度达到最大时,您可以执行自己的操作

© www.soinside.com 2019 - 2024. All rights reserved.