Sobes.tech
Junior

Wie lädt man ein Bild aus dem Internet und zeigt es in ImageView nach dem Drücken eines Buttons an?

sobes.tech KI

Antwort von AI

  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() // Запускаем задачу
    }
}