小编Alb*_*nas的帖子

如何将UIImage异步加载到SwiftUI图像中?

在SwiftUI中,有一些.init创建图像的方法,但是它们都不允许使用块或任何其他方式从网络/缓存加载UIImage ...

我正在使用Kingfisher从网络加载图像并在列表行中缓存,但是在视图中绘制图像的方法是再次重新渲染它,我不想这样做。另外,在获取图像时,我正在创建一个假图像(仅彩色)作为占位符。另一种方法是将所有内容包装在自定义视图中,然后仅重新渲染包装器。但是我还没有尝试过。

此示例现在正在工作。任何改善当前想法的想法都会很棒

使用加载程序的某些视图

struct SampleView : View {

    @ObjectBinding let imageLoader: ImageLoader

    init(imageLoader: ImageLoader) {
        self.imageLoader = imageLoader
    }

    var body: some View {
       Image(uiImage: imageLoader.image(for: "https://url-for-image"))
          .frame(width: 128, height: 128)
          .aspectRatio(contentMode: ContentMode.fit)
    }

}
Run Code Online (Sandbox Code Playgroud)
import UIKit.UIImage
import SwiftUI
import Combine
import class Kingfisher.ImageDownloader
import struct Kingfisher.DownloadTask
import class Kingfisher.ImageCache
import class Kingfisher.KingfisherManager

class ImageLoader: BindableObject {

    var didChange = PassthroughSubject<ImageLoader, Never>()
    private let downloader: ImageDownloader
    private let cache: ImageCache
    private var image: UIImage? …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui

6
推荐指数
4
解决办法
3078
查看次数

如何使用 combine Publisher 更改线程?

我正在使用Combine 和SwiftUI 来做一些异步的事情,关键是我不知道如何从主线程中的异步操作接收响应。在苹果的文档说,它可以使用的RunLoop.main,但目前雨燕5.0是不是调度。那么对此有什么想法吗?

我试图按照苹果文档使用,但没有运气。

anyPublisher
    .receiveOn(on: RunLoop.main)
Run Code Online (Sandbox Code Playgroud)

swift swiftui combine

6
推荐指数
1
解决办法
2289
查看次数

如何更改导航栏中的背景或颜色?

目前我找不到任何方法来更改 SwiftUI 中导航栏的颜色/背景。有小费吗?

navigationbar swiftui

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

swiftui ×3

swift ×2

combine ×1

ios ×1

navigationbar ×1