Как создать массив изображений из папки assets в Swift 5? - PullRequest
0 голосов
/ 22 января 2020

Я новичок ie в разработке Swift, и в эти месяцы я собираюсь персонализировать некоторые базовые проекты, такие как приложение для игры в кости.

На данный момент у меня есть одна проблема, которую нелегко решить найти в StackOverflow:

1) как создать массив граней костей из папки, расположенной в assets.xcassets (в настоящее время я вручную загрузил 6 граней костей в массив с именем diceArray, но если кость имеет 50 граней, это было бы пустой тратой времени)

Мой фактический код

class ViewController: UIViewController {


    @IBOutlet weak var diceImageView1: UIImageView!
    @IBOutlet weak var diceImageView2: UIImageView!


    @IBAction func rollButtonPressed(_ sender: UIButton) {

        let diceArray = [ #imageLiteral(resourceName: "DiceOne"), #imageLiteral(resourceName: "DiceTwo"), #imageLiteral(resourceName: "DiceThree"), #imageLiteral(resourceName: "DiceFour"), #imageLiteral(resourceName: "DiceFive"), #imageLiteral(resourceName: "DiceSix")]

        diceImageView1.image = diceArray.randomElement()
        diceImageView2.image = diceArray.randomElement()

    }

}

Ответы [ 3 ]

1 голос
/ 22 января 2020

Один простой способ - назвать все изображения с фиксированным префиксом и номером. Назовите изображения как face1, face2 ... face50

var imagesArr = (0...50).compactMap { UIImage(named: "face\($0)") }

или

var imagesArr = [UIImage]()
(0...50).forEach { imagesArr.append(UIImage(named: "face\($0)")!) }
1 голос
/ 22 января 2020

Я думаю, загрузка 50 изображений в массив не очень хорошая идея. Я знаю, что вы следуете учебному пособию.
Для более похожих типов изображений вы можете попробовать это.

  • Попробуйте все префиксы имен изображений одинаковые. Например: Dice1, Dice2, Dice3 ... Dice50 // Здесь префикс Dice
  • Получить случайное число между 0-49
  • Предположим, вы получили случайное число 30. Теперь вы можете просто получить изображение таким образом
    let randomNumber = 30  
    let image = UIImage(named: "Dice\(randomNumber)")
    

Таким образом, не нужно создавать массив из 50 изображений.

1 голос
/ 22 января 2020

Что бы содержал ваш массив? UIImage? Если это так, просто прочитайте их из ресурсов с помощью

var myImagesArray: [UIImage]
// Do this for each image.
let image = UIImage(named: "aName") ?? UIImage()
myImagesArray.append(image)

, вы можете сохранить имя для изображения в массиве:

var myImagesArray: [(faceNum: Int, name: String, image: UIImage)]
let image = UIImage(named: "face1") ?? UIImage()
let faceNum = 1
myImagesArray.append((1, "face1",image))

Когда вы загружаете изображения, вы можете проверить, что

myImagesArray[i].num 

еще не используется

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...