ios - 如何使用 SwiftUI 为一系列图像制作动画?

标签 ios swift xcode animation swiftui

如何使用 SwiftUI 框架为一系列图像(比如 Frame-1.png 到 Frame-6)制作动画?

我已经尝试创建一个“图像”数组。然后我将 UIImage.animatedImage(with: images, duration: 1.0) 方法分配给一个名为“animatedImage”的变量 最后我在“ContentView.swift”的“body”中尝试了 Image(uiImage: animatedImage)


var images: [UIImage]! = [UIImage(named: "Sequence/frame-1")!,
                          UIImage(named: "Sequence/frame-2")!,
                          UIImage(named: "Sequence/frame-3")!,
                          UIImage(named: "Sequence/frame-4")!,
                          UIImage(named: "Sequence/frame-5")!,
                          UIImage(named: "Sequence/frame-6")!
]

let animatedImage : UIImage! = UIImage.animatedImage(with: images, duration: 1.0)

//////Then in the ContentView.swift I've tried this code:

struct ContentView : View {
    var body: some View {

        Image(uiImage: animatedImage)

    }
}

当我运行程序时,它只显示第一帧,但我希望有帧动画

最佳答案

接受的答案非常有效,但 bhagyash ingale 提到的不幸问题使其很难使用。如果 Image 的特定方法可以通过协议(protocol)或其他方式重用,那将会很有用。我有一个非常糟糕的,也许是巨大的大炮来解决这个问题,也许及时会更容易,但现在......

class LoadingTimer {

    let publisher = Timer.publish(every: 0.1, on: .main, in: .default)
    private var timerCancellable: Cancellable?

    func start() {
        self.timerCancellable = publisher.connect()
    }

    func cancel() {
        self.timerCancellable?.cancel()
    }
}
struct LoadingView: View {

    @State private var index = 0

    private let images = (0...7).map { UIImage(named: "Image-\($0).jpg")! }
    private var timer = LoadingTimer()

    var body: some View {

        return Image(uiImage: images[index])
            .resizable()
            .frame(width: 100, height: 100, alignment: .center)
            .onReceive(
                timer.publisher,
                perform: { _ in
                    self.index = self.index + 1
                    if self.index >= 7 { self.index = 0 }
                }
            )
            .onAppear { self.timer.start() }
            .onDisappear { self.timer.cancel() }
    }
}

我不喜欢这个,但它完成了工作并依赖于 Image

关于ios - 如何使用 SwiftUI 为一系列图像制作动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56722695/

相关文章:

swift - 存储的时间戳与当前日期之间的差异

iphone - 在 Xcode 4.2 上打开 Xcode 4.5 项目时出错

iphone - 为什么只有 viewWillAppear 在返回导航时被调用

iphone - 如何将代码附加到正在运行的 iPhone 应用程序

ios - 在React Native中出现“未定义不是对象(评估StyleSheet.create)”错误

ios - SceneKit 相机节点在捏手势时重置

ios - 如何通过文件夹ios从 Assets 中获取图像

ios - 在没有质量损失的情况下调整 UILabel 的大小

ios - 是否有用于将HDR图像用于照度图的工作流程?

ios - 路由应用程序覆盖文件可选且不包含在内,但现在我无法保存