Sobes.tech
Junior

How to load an image from the internet and display it in an ImageView after pressing a button?

sobes.tech AI

Answer from AI

  1. Add the image URL.
  2. Create a URLSessionTask to load the data.
  3. Convert Data to UIImage in the completionHandler of the task.
  4. Update UIImageView on the main thread.
import UIKit

class ViewController: UIViewController {

    let imageView = UIImageView()
    let loadButton = UIButton(type: .system)

    override func viewDidLoad() {
        super.viewDidLoad()
        setupUI()
    }

    func setupUI() {
        view.addSubview(imageView)
        view.addSubview(loadButton)

        imageView.translatesAutoresizingMaskIntoConstraints = false
        loadButton.translatesAutoresizingMaskIntoConstraints = false

        NSLayoutConstraint.activate([
            imageView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            imageView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
            imageView.widthAnchor.constraint(equalToConstant: 200),
            imageView.heightAnchor.constraint(equalToConstant: 200),

            loadButton.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            loadButton.topAnchor.constraint(equalTo: imageView.bottomAnchor, constant: 20)
        ])

        loadButton.setTitle("Load Image", for: .normal)
        loadButton.addTarget(self, action: #selector(loadButtonTapped), for: .touchUpInside)
    }

    @objc func loadButtonTapped() {
        loadImageFromURL("https://your_image_link.png") // Replace with your actual link
    }

    func loadImageFromURL(_ urlString: String) {
        guard let url = URL(string: urlString) else {
            print("Invalid URL")
            return
        }

        URLSession.shared.dataTask(with: url) { data, response, error in
            if let error = error {
                print("Loading error: \(error.localizedDescription)")
                return
            }

            guard let data = data else {
                print("No data")
                return
            }

            guard let loadedImage = UIImage(data: data) else {
                print("Failed to create image from data")
                return
            }

            // Update UI on the main thread
            DispatchQueue.main.async {
                self.imageView.image = loadedImage
            }
        }.resume() // Start the task
    }
}