#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]
}