Sobes.tech
Junior

Hoe laad je een afbeelding van internet en toon je deze in ImageView nadat je op een knop hebt gedrukt?

sobes.tech AI

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