Назад к вопросам
Junior
127
questionbank

Как загрузить изображение из интернета и отобразить его в ImageView после нажатия на кнопку?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

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