SwiftUI'de Paketi Resimle Kullanma

Aug 18 2020

Örneğin: projemde Bundle var, buna "Game.Bundle" deniyor

let b :Bundle = Bundle.init(path: Bundle.main.path(forResource:"Game", ofType:"bundle")!)!
Image("Giyuu",bundle:self.b)

ama Bundle çalışmıyor.

özel Paketi nasıl kullanabilirim

Yanıtlar

1 Asperi Aug 18 2020 at 23:09

SwiftUI Image(_ , bundle: _), ilgili paketin Varlıklar kataloğunda görüntü kaynağını arar. Sizin durumunuzda, görüntü yalnızca normal dosya olarak gömülüdür, bu nedenle onu bulup dosya olarak yüklemeniz gerekir. Imagekendisi bunu yapamaz, bu yüzden UIImageböyle bir imkana sahip olanla inşa edilmelidir .

Yani, sen varsayarak Game.bundleolduğunu PlugIns(- sadece doğru gelen yol yapımı altında değilse) burada mümkün yaklaşımdır ana paketin alt klasöründe.

Xcode 12 / iOS 14 ile test edildi

struct ContentView: View {
    var body: some View {
        Image(uiImage: gameImage(name: "test") ?? UIImage())
    }

    func gameImage(name: String, type: String = "png") -> UIImage? {
        guard let plugins = Bundle.main.builtInPlugInsPath,
              let bundle = Bundle(url: URL(fileURLWithPath:
                           plugins).appendingPathComponent("Game.bundle")),
              let path = bundle.path(forResource: name, ofType: type)
              else { return nil }
        return UIImage(contentsOfFile: path)
    }
}
1 WarrenBurton Aug 18 2020 at 22:42

Sağlanan snippet'iniz bhem selförnek hem de yerel değişken olarak referans veriyor gibi görünüyor

let b :Bundle = Bundle.init(path: Bundle.main.path(forResource:"Game", ofType:"bundle")!)!
Image("Giyuu",bundle:self.b)

İstedin mi?

let bundle :Bundle = Bundle.init(path: Bundle.main.path(forResource:"Game", ofType:"bundle")!)!
let image = Image("Giyuu",bundle:bundle)

Ya !da bazı sorun analizleri ekleyerek güç açmalarını ortadan kaldırmak için yeniden düzenlenmiştir .

func getGiyuuImage() -> Image {
    guard let path = Bundle.main.path(forResource:"Game", ofType:"bundle"), let bundle = Bundle(path: path) else {
        fatalError("dev error - no Game bundle")
    }
    let image = Image("Giyuu",bundle: bundle)
    return image
}