Слайды UIImageView с помощью кнопок

#ios #arrays #swift #uiimageview

Вопрос:

У меня есть домашнее задание, с которым я застрял. Вот он:

Создайте проект галереи: большой UIImageView и две кнопки под ним: Назад и Далее. Добавьте в проект 10 картинок, и при нажатии на кнопки должна отображаться предыдущая или следующая картинка соответственно.

Поэтому я создал массив и какую-то *глупую попытку* пройти через этот массив. Но я на 100% уверен, что на этот вопрос есть какой-то простой ответ.
Спасибо!

 import UIKit


class ViewController: UIViewController {
    
    @IBOutlet weak var imagesIV: UIImageView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
       }
    let images = [UIImage(named: "1"), UIImage(named: "2"), UIImage(named: "3"),UIImage(named: "4"),UIImage(named: "5"),UIImage(named: "6"),UIImage(named: "7"),UIImage(named: "8"),UIImage(named: "9"),UIImage(named: "10")]
    var numberOfImages = images.count
    var  currentImage = 0

    @IBAction func forwardButton(_ sender: Any) {
        guard case currentImage   1 < images.count else {return}
        currentImage  = 1
    }
    
    @IBAction func backButton(_ sender: Any) {
    }
}
 

Комментарии:

1. Где «imagesIV» вступает в игру?

Ответ №1:

На мой взгляд, ниже приведен лучший способ, в частности, сделать ваш код масштабируемым (например, если у вас 1000 фотографий, вы не хотите добавлять их вручную одну за другой в массив).:

 class ViewController: UIViewController {
    
    @IBOutlet weak var imagesIV: UIImageView!
    var  currentImageIndex = 0
    var images : [UIImage] = []
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        for a in 1...10 {
            if let newImage = UIImage(named: "(a)") {
                images.append(newImage)
            }
        }
        
        updateImageInImageView()
    }
    
    @IBAction func forwardButton(_ sender: Any) {
        if currentImageIndex   1 != images.count { currentImageIndex  = 1} else { currentImageIndex = 0}
        updateImageInImageView()
    }
    
    @IBAction func backButton(_ sender: Any) {
        if currentImageIndex != 0 { currentImageIndex -= 1} else { currentImageIndex = images.count - 1}
        updateImageInImageView()
    }
    
    func updateImageInImageView()  {
        imagesIV.image = images[currentImageIndex]
    }
}
 

Комментарии:

1. Привет! Спасибо! Но могу я задать несколько вопросов, чтобы лучше понять, что происходит под капотом? В какой части мы подключаем массив к UIImageView? Как код узнает, что мы хотим, чтобы он помещал туда картинки? И в этой части «UIImage(имя: «(a)»)» почему он загрузил все фотографии? «а» — это своего рода универсальный заполнитель? Еще раз спасибо и извините за некоторые дополнительные вопросы!

2. Здравствуйте @KseniiaPiskun [В какой части мы подключаем массив к UIImageView?] Обновление изображения выполняется с помощью функции updateImageInImageView (). [Откуда код знает, что мы хотим, чтобы он помещал туда картинки?] Функция updateImageInImageView() запускается после нажатия кнопки вперед или кнопки назад. [И в этой части «UIImage(по имени: «(a)»)» почему он загрузил все фотографии? «а» — это своего рода универсальный заполнитель?], нет, это простой цикл, который сам повторяется 10 раз, каждый раз увеличивая значение а на 1, а затем связывает значение со строкой изображения, после чего новое изображение добавляется в массив

Ответ №2:

Вы можете попробовать

 @IBAction func forwardButton(_ sender: Any) {
    guard currentImage   1 < images.count else {return}
    currentImage  = 1
    imagesIV.image = images[currentImage]
}

@IBAction func backButton(_ sender: Any) {
    guard currentImage - 1 >= 0  else {return}
    currentImage -= 1
    imagesIV.image = images[currentImage]
}