Sobes.tech
Junior

Comment charger une image depuis Internet et l'afficher dans ImageView après avoir appuyé sur un bouton?

sobes.tech IA

Réponse de l'IA

  1. Добавить URL изображения.
  2. Создать URLSessionTask для загрузки данных.
  3. В completionHandler задачи преобразовать Data в UIImage.
  4. Обновить UIImageView на главном потоке.
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("Загрузить изображение", for: .normal)
        loadButton.addTarget(self, action: #selector(loadButtonTapped), for: .touchUpInside)
    }

    @objc func loadButtonTapped() {
        loadImageFromURL("https://ссылка_на_ваше_изображение.png") // Замените на реальную ссылку
    }

    func loadImageFromURL(_ urlString: String) {
        guard let url = URL(string: urlString) else {
            print("Неверный URL")
            return
        }

        URLSession.shared.dataTask(with: url) { data, response, error in
            if let error = error {
                print("Ошибка загрузки: \(error.localizedDescription)")
                return
            }

            guard let data = data else {
                print("Нет данных")
                return
            }

            guard let loadedImage = UIImage(data: data) else {
                print("Не удалось создать изображение из данных")
                return
            }

            // Обновляем UI на главном потоке
            DispatchQueue.main.async {
                self.imageView.image = loadedImage
            }
        }.resume() // Запускаем задачу
    }
}