LoginSignup
9
6

More than 3 years have passed since last update.

【WidgetKit】WidgetKitのSwiftUIでURLから画像を表示する方法

Last updated at Posted at 2021-03-02

WidgetKitでは独特なライフサイクルから描写のタイミングに制限があり、
従来の方法である非同期では画像を表示することができません。

解決方法

Data(ContentsOf: url)を使って予め画像データを読み込んでから描画することでこれを解決することができます。

サンプル実装

struct SimpleEntry: TimelineEntry {

    let date: Date
    let configuration: ConfigurationIntent
    let url: String

    func getImageData() -> UIImage {
        if let imageUrl = URL(string: self.url),
           let imageData = try? Data(contentsOf: imageUrl),
           let image = UIImage(data: imageData) {
            return image
        }
        // 読み込めない時の画像とか
        return .init()
    }
}

struct widgetEntryView : View {
    var entry: Provider.Entry

    var body: some View {
        Image(uiImage: entry.getImageData())
            .resizable()
            .aspectRatio(contentMode: .fill)
    }
}
この実装でこのように表示することができました。

Simulator Screen Shot - iPhone 12 Pro - 2021-03-02 at 17.23.00.png

最後に

非同期が使えないのは結構な罠だと思うので気をつけてくださいねー👋

9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6