iosで複数の進捗状況を示すプログレスバーを作成するにはどうすればよいですか? は、私はそれが私がこのような何かを探していますUIProgressView複数の進行状況を持つUIProgressView
答えて
標準UIProgressView
には1つの進捗のみが表示され、複数のアイテムの進捗状況をキャプチャしようとする場合は、Progress
/NSProgress
というオブジェクトの階層があります。例えば。 5つのファイルをアップロードする場合は、Progress
個のオブジェクトがアップロードごとに1つずつあり、次にUIProgressView
が参照する第6のNSProgress
があり、残りの5つは子として表示されます。進捗オブジェクトのツリーの作成NSProgress class referenceのを参照してください。例については、https://stackoverflow.com/a/36616538/1271826を参照してください。
個々のNSProgress
の進行状況を視覚的に表す進捗状況を表示するには、これを自分で行う必要があります(またはこれを行う第三者のコントロールを見つける必要があります)。しかし、標準UIProgressView
はあなたのためにこれを行いません。
しかし、それは難しくありません。たとえば、横方向のスタックビューを作成し、追跡するごとに1つを追加し、サブビューのそれぞれの幅を、タスク全体のどのような割合で設定するかを設定します。
など。ここでは3 UIProgressView
水平スタックビューは、サブビューを配置している。
は、ユーザーがより簡単に、彼らがどのように遠くに沿って見ることができるので、私は標準のシングルを好む、連結UIProgessView
と述べました。このような一連の進捗状況がある場合は、個々の進捗状況をすべて見て精神的に把握しなければならないため、「どれくらいの時間がかかりますか」を視覚的に確認することは本当に難しいです(たとえば、「最初は50 %done、2回目は66%、3回目は75%done ...というように、どれくらいの距離があるのでしょうか?
とにかく、私のスウィフトコードは上記をレンダリングします。私はあなたがObjective-Cの探している知っているが、うまくいけば、これは簡単にスウィフトやObjective-Cのいずれかで実装することができる基本的な考え方説明するために十分である:
class MultiProgressView: UIStackView {
struct ProgressInfo {
let progressView: UIProgressView
let totalToken: NSKeyValueObservation
let progressToken: NSKeyValueObservation
}
var progressInfo = [ProgressInfo]()
var progressHandler: ((Double) -> Void)?
var widthConstraints: [NSLayoutConstraint]?
func add(_ progress: Progress, progressTintColor: UIColor = .blue, trackTintColor: UIColor? = nil) {
let progressView = UIProgressView(progressViewStyle: .bar)
progressView.translatesAutoresizingMaskIntoConstraints = false
progressView.progressTintColor = progressTintColor
progressView.trackTintColor = trackTintColor ?? progressTintColor.withAlphaComponent(0.5)
addArrangedSubview(progressView)
progressView.heightAnchor.constraint(equalTo: heightAnchor, multiplier: 1)
progressView.observedProgress = progress
let totalToken = progress.observe(\.totalUnitCount) { [weak self] (_, _) in
self?.updateWidths()
}
let progressToken = progress.observe(\.completedUnitCount) { [weak self] (_, _) in
if let percent = self?.percent {
self?.progressHandler?(percent)
}
}
progressInfo.append(ProgressInfo(progressView: progressView, totalToken: totalToken, progressToken: progressToken))
updateWidths()
}
private func updateWidths() {
if let widthConstraints = self.widthConstraints {
removeConstraints(widthConstraints)
}
let totalUnitCount = self.totalUnitCount
guard totalUnitCount > 0 else { return }
widthConstraints = progressInfo.map { progressInfo in
let unitCount = progressInfo.progressView.observedProgress?.totalUnitCount ?? 0
return NSLayoutConstraint(item: progressInfo.progressView, attribute: .width, relatedBy: .equal, toItem: self, attribute: .width, multiplier: CGFloat(unitCount)/CGFloat(totalUnitCount), constant: 0)
}
DispatchQueue.main.async {
self.addConstraints(self.widthConstraints!)
}
}
var totalUnitCount: Int64 {
return progressInfo.reduce(Int64(0)) { $0 + ($1.progressView.observedProgress?.totalUnitCount ?? 0) }
}
var completedUnitCount: Int64 {
return progressInfo.reduce(Int64(0)) { $0 + ($1.progressView.observedProgress?.completedUnitCount ?? 0) }
}
var percent: Double {
return Double(completedUnitCount)/Double(totalUnitCount)
}
}
をし、それを使用する:
override func viewDidLoad() {
super.viewDidLoad()
let download1 = Download(...)
let download2 = Download(...)
let download3 = Download(...)
mainProgressView.progressHandler = { [weak self] percent in
self?.checkIfDone(percent: percent)
}
mainProgressView.add(download1.progress, progressTintColor: .blue)
mainProgressView.add(download2.progress, progressTintColor: .green)
mainProgressView.add(download3.progress, progressTintColor: .red)
download1.startDownload()
download2.startDownload()
download3.startDownload()
}
private func checkIfDone(percent: Double) {
if percent == 1 {
print("done")
}
}
- 1. UIprogressViewのアップデートの進捗状況を知る
- 2. 進行状況のテキストを含む水平進行状況バー
- 3. 進行状況バーを使用したJQueryの複数リクエスト
- 4. wxPythonの進行状況バー
- 5. pandas.DataFrame.to_sqlの進行状況バー
- 6. Eclipseの進行状況
- 7. AVPlayerストリーミングの進行状況
- 8. アップロードの進行状況 - リクエスト
- 9. システムメディアプレーヤーの進行状況(UISlider)
- 10. 複数のajax jsonpプロセスの進行状況
- 11. 複数のループされたAjaxの進行状況
- 12. 進行状況のイベントを進行状況バーにリンクする方法
- 13. parSapplyと進行状況バー
- 14. マルチステップモーダル - 進行状況バー
- 15. ウェブサイトコンテンツロード、進行状況バー
- 16. 複数のアップロード進捗の主な進捗状況(Android)
- 17. UIProgressViewは最初の0.05の進捗状況を反映していません
- 18. UIProgressViewとASIHTTPRequestを使用したダウンロードの進捗状況の追跡
- 19. スウィフト3:UIProgressViewは進捗状況を更新しませんでした
- 20. フレックスイベントの進行状況を確認
- 21. バネバッチジョブの進行状況を監視
- 22. cURLの進行状況を確認
- 23. Opengeの進捗状況で制約を持つテーブルを作成
- 24. HTTPの進行状況のアップロード
- 25. UrlEncodedFormEntityのAndroid HTTPアップロードの進行状況
- 26. Amazon EMR MapReduceの進行状況のロールバック?
- 27. Firefoxの進行状況バーのスタイル
- 28. wxpythonのファイルコピーの進行状況バー
- 29. 複数のスレッド内の進捗状況を追跡
- 30. Uiで進行状況を表示
Rob、あなたはコメントでOPの質問に答えました。あなたはあなたの回答を回答として投稿して、彼がそれを受け入れることができるようにし、私たちはそれらを投票することができます。 –