2016-06-09 4 views
0

Iv работал над игрой в течение 6 месяцев и у меня есть проблема, которую я не могу исправить. Есть несколько похожих вопросов, но ни одна из них не соответствует моей ситуации.Показать изображение Сохранено в хранилище Firebase (Google Cloud) В UIImageView?

Резюме

Моя игра имеет 200 пунктов. Каждый элемент имеет разблокированное изображение, показывающее фактический элемент и заблокированное изображение, просто показывая его серым цветом. Я собираюсь положить все 200 разблокированных изображений в хранилище Firebase и около 15 заблокированных изображений (так как каждый элемент имеет около 15 скинов, база всегда одна и та же) тоже.

Проблема

StoreViewController страница является UIViewController с CollectionView погруженных внутри него. При создании CollectionViewTableCells для каждой ячейки есть UIImageView. Каждая итерация клеток через массив словарей, как так (обычно этот массив будет иметь 150 + словари):

let items : [[String:String]] = [ 

    [ 
     "type" : "star", 
     "model" : "blackOne", 
     "available" : "no", 
     "rarity" : "normal", 
     "totalOwned" : "1", 
     "price" : "9,999", 
     "u-image" : "blackone-u", 
     "l-image" : "star-l" 
    ], 
    [ 
     "type" : "star", 
     "model" : "blackTwo", 
     "available" : "no", 
     "rarity" : "normal", 
     "totalOwned" : "1", 
     "price" : "10,500", 
     "u-image" : "blacktwo-u", 
     "l-image" : "star-l" 
    ], 
    [ 
     "type" : "square", 
     "model" : "black-New", 
     "available" : "no", 
     "rarity" : "normal", 
     "totalOwned" : "1", 
     "price" : "12,950", 
     "u-image" : "blacknew-u", 
     "l-image" : "square-l" 
    ] 
] 

u-image & l-image содержит имя соответствующего изображения для этого элемента. Те же изображения, которые загружаются в хранилище Firebase.

Вопрос

Как я должен использовать u-image & l-image, чтобы захватить Firebase хранения и отображения правильного изображения в каждой UICollectionViewCell's UIImage? Мне нужно захватить ~ 200 изображений для отображения каждый раз, когда они идут на StoreViewController.

ответ

1

Я бы настоятельно подумал о замене «u-image» и «l-image» на публичный неопознанный url (например, «u-image-url»), который автоматически создается для вашего изображения. Этот URL можно загрузить без специального кода, чтобы вы могли выполнить шаги here, чтобы добавить заполнители и использовать локальное кэширование изображений. Вы можете получить этот общедоступный URL-адрес через консоль firebase, а также программно.

Через консоль: enter image description here

Программным:

// Get a reference to the storage service, using the default Firebase App 
FIRStorage *storage = [FIRStorage storage]; 
// Create a storage reference from our storage service 
FIRStorageReference *storageRef = [storage referenceForURL:@"gs://<your-firebase-storage-bucket>"]; 
FIRStorageReference *imagesRef = [storageRef child:<uimageString_from_array + '.png'>]; 
[imagesRef downloadURLWithCompletion:^(NSURL URL, NSError error){ 
    if (error != nil) { 
    // Handle any errors 
    } else { 
    [cell.imageView setImageWithURL:URL placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; 
    } 
}]; 

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

+0

Awesome Benjamin! У меня есть еще один вопрос. В зависимости от «типа» элемента имеется около 10 различных изображений-заполнителей. Как я могу показать соответствующий заполнитель для каждого типа пистолета? Вот почему я получил «u-образ» (разблокированное изображение) и «l-образ» (запертый образ) – brkr

Смежные вопросы