UIProgressView in UIKit

UIProgressView is a useful component in the UIKit framework that provides a visual indicator of a task's progress. In this article, we will explore what UIProgressViews are, the various functionalities they offer

article

UIProgressView in UIKit


UIProgressView is a useful component in the UIKit framework that provides a visual indicator of a task's progress. In this article, we will explore what UIProgressViews are, the various functionalities they offer, and provide practical code examples to demonstrate how you can implement and customize them in your iOS projects.


What is a UIProgressView?


A UIProgressView is a UIControl that provides a visual representation of the progress of a task over time. It displays a horizontal bar that fills up as progress is made, making it ideal for showing the status of tasks such as file downloads, data processing, or any long-running operations.


What Can You Do with UIProgressViews?


UIProgressViews offer a range of functionalities and customization options. Here are some key things you can do with UIProgressViews:


  • Display Progress: Show the progress of a task with a filling bar.
  • Set Progress Values: Programmatically set the progress value to update the UI.
  • Animate Progress Changes: Animate the change of the progress bar for smooth visual updates.
  • Custom Appearance: Customize the appearance of the progress bar, including track tint color and progress tint color.
  • Track Completion: Use target-action methods to respond to progress completion events.

Let's dive into some code examples to see how you can create, customize, and work with UIProgressViews in Swift.


Creating a Simple UIProgressView


To create a simple UIProgressView, you need to initialize it and add it to your view. Here is an example:


import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white

        // Create a UIProgressView
        let progressView = UIProgressView(progressViewStyle: .default)
        progressView.center = view.center
        progressView.progress = 0.5
        progressView.translatesAutoresizingMaskIntoConstraints = false

        // Add the progress view to the view
        view.addSubview(progressView)

        // Set Auto Layout constraints
        NSLayoutConstraint.activate([
            progressView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            progressView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
            progressView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
            progressView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20)
        ])
    }
}

In this example, we create a UIProgressView and set its initial progress to 50%. The progress view is added to the view and centered using Auto Layout constraints.


Updating UIProgressView Progress


You can programmatically update the progress of a UIProgressView to reflect the current state of a task. Here is an example of updating the progress value:


import UIKit

class ViewController: UIViewController {
    let progressView = UIProgressView(progressViewStyle: .default)

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white

        // Configure the progress view
        progressView.center = view.center
        progressView.progress = 0.0
        progressView.translatesAutoresizingMaskIntoConstraints = false

        // Add the progress view to the view
        view.addSubview(progressView)

        // Set Auto Layout constraints
        NSLayoutConstraint.activate([
            progressView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            progressView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
            progressView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
            progressView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20)
        ])

        // Simulate progress update
        updateProgress()
    }

    func updateProgress() {
        var progress: Float = 0.0
        Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { timer in
            progress += 0.01
            self.progressView.setProgress(progress, animated: true)
            if progress >= 1.0 {
                timer.invalidate()
                print("Progress complete")
            }
        }
    }
}

In this example, we simulate a task's progress by incrementing the progress value of the UIProgressView in a timer. The progress is updated every 0.1 seconds, and the progress bar animates smoothly to reflect the changes.


Customizing UIProgressView Appearance


You can customize the appearance of UIProgressView to match the design of your application. Here is an example of customizing the track tint color and progress tint color:


import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white

        // Create a UIProgressView
        let progressView = UIProgressView(progressViewStyle: .default)
        progressView.progress = 0.5
        progressView.translatesAutoresizingMaskIntoConstraints = false

        // Customize appearance
        progressView.trackTintColor = .lightGray
        progressView.progressTintColor = .blue

        // Add the progress view to the view
        view.addSubview(progressView)

        // Set Auto Layout constraints
        NSLayoutConstraint.activate([
            progressView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            progressView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
            progressView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
            progressView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20)
        ])
    }
}

In this example, we customize the UIProgressView by setting its track tint color to light gray and its progress tint color to blue. These properties change the colors of the progress bar's track and filled area.


Handling Progress Completion


You can respond to progress completion events by using target-action methods or delegate methods. Here is an example of handling progress completion:


import UIKit

class ViewController: UIViewController {
    let progressView = UIProgressView(progressViewStyle: .default)

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white

        // Configure the progress view
        progressView.center = view.center
        progressView.progress = 0.0
        progressView.translatesAutoresizingMaskIntoConstraints = false

        // Add the progress view to the view
        view.addSubview(progressView)

        // Set Auto Layout constraints
        NSLayoutConstraint.activate([
            progressView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            progressView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
            progressView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
            progressView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20)
        ])

        // Simulate progress update
        updateProgress()
    }

    func updateProgress() {
        var progress: Float = 0.0
        Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { timer in
            progress += 0.01
            self.progressView.setProgress(progress, animated: true)
            if progress >= 1.0 {
                timer.invalidate()
                self.progressCompleted()
            }
        }
    }

    func progressCompleted() {
        let alert = UIAlertController(title: "Progress", message: "Task Completed!", preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
        present(alert, animated: true, completion: nil)
    }
}

In this example, we show an alert when the progress completes by checking if the progress value reaches 1.0 in the timer's action. The progressCompleted method presents an alert to indicate that the task is complete.


Conclusion


UIProgressViews are essential components for providing visual feedback on the progress of tasks in your iOS applications. In this article, we've covered the basics of what UIProgressViews are, their various functionalities, and provided practical code examples to help you implement and customize them in your own projects. From creating simple progress views to customizing their appearance and handling progress completion, mastering UIProgressViews is crucial for building intuitive and user-friendly interfaces.


Understanding and effectively utilizing UIProgressViews can significantly enhance your app's usability and user experience. Experiment with different UIProgressView properties and techniques to create dynamic and engaging progress indicators in your iOS applications.

instructor

Exodai INSTRUCTOR!

Johan t'Sas

Owner and Swift developer!