Загрузка ARReferenceImage из массива в хранилище Firebase - PullRequest
0 голосов
/ 21 января 2019

Я работаю над приложением, в котором у меня есть наборы ARReferenceImages в базе данных, которые пользователи могут загрузить и использовать.Эти ARReferenceImages создаются пользователем.

Я закодировал все до того места, где пользователь создал ARReferenceImages, которые помещены в массив и массив, но это то, где я полностью озадачен.

Кажется, довольно просто загрузить UIImages в хранилище, но когда дело доходит до ARReferenceImages, я просто не могу найти нигде, который говорит мне, что делать.

Я попытался получить путь к файлуна моем телефоне, но это, по-видимому, недостаточно, или правильно.Поэтому мне интересно, должен ли я загружать изображения как UIImages и сохранять ширину каждого изображения отдельно, после чего я конвертирую их в ARReferenceImages при загрузке на телефон.Но это просто кажется глупым, если бы я мог загрузить и загрузить фактический ARReferenceImage как есть.

Может ли кто-нибудь указать мне правильное направление?

Пример кода, который я добавил, простопокажи, что я пытаюсь сделать.Параметр uploadData let выдает ошибку, так как она должна иметь тип Data(), а не тип URL.Но я просто не знаю, как это сделать.

Заранее спасибо.

`
for referenceImage in referenceImagesArray {

    let urlPath = Bundle.main.url(forResource: referenceImage.name, 
    withExtension: nil)

    let thisGameStorageRef = Storage.storage().reference().child(folderRef).child(referenceImage.name ?? "")

            // Get image data
            if let uploadData = urlPath {

                // Upload image to Firebase Cloud Storage
                thisGameStorageRef.putData(uploadData, metadata: nil) { 
(metadata, error) in
                    guard error == nil else {`

1 Ответ

0 голосов
/ 21 января 2019

Я часами осматривался и читал документацию по Firebase, быструю документацию, а также читал и просматривал несколько учебных пособий, и пришел к следующему выводу.

Кажется, что я пытаюсь сделатьэто очень сложно, или, может быть, это плохая идея, так как даже если это может сработать, оно может сломать приложение, потому что ARReferenceImages может быть слишком тяжелым для способа, которым я пытаюсь это сделать.Таким образом, решение, которое я собираюсь использовать, заключается в том, что я буду:

  1. Делать изображения с помощью камеры, а также добавлять ширину изображений в реальном мире.Они будут сохранены как UIImages и CGFloats с именами, которые ссылаются друг на друга.
  2. Затем я сохраню UIImages и CGFloats отдельно, с UIImage в облачном хранилище Firebase и CGFloat в базе данных реального времени Firebase.
  3. Когда мне нужно использовать их в качестве ARReferenceImage, я получу изображения и ширину и преобразую их в ARReferenceImages, которые я могу поместить в массив и использовать с моим приложением AR.

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

Большая часть этого кода не сложна, но для основного вопроса я добавлю код, который я написал для сохранения UIImages из моего массива:

`var counter = 0
 for uiImage in uiImagesArray {
     let imageName = "image\(uiImagesArray[counter])"
     saveImage(imageName: imageName, theImage: uiImage, storageRef: 
     imagesStorageRef)
     counter = counter + 1
 }`

`func saveImage(imageName: String, theImage: UIImage, storageRef: 
 StorageReference){
    //get the PNG data for image
    let imageData = theImage.pngData()
    //create reference for storage
    let thisStorageRef = storageRef.child(gameTitle + "/" + imageName)
    //upload it to Firebase
    thisStorageRef.putData(imageData!, metadata: nil)
}`

Если кто-то хочет увидеть большемоего кода, для других частей этого, просто прокомментируйте, и я опубликую это.

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