我正在try 在Swiftui中创建一个图像动画.我想单击一个带有标签的按钮作为图像(该图像是图像数组中的第一个元素).单击按钮后,我希望显示数组中的其余图像,并使标签图像随着数组中的每个新元素而每秒更改.在这方面有任何帮助都是很好的.

目前,我可以使用一个按钮点击来改变图像后,每次点击,但我想要一次点击后的图像动画

我所拥有的:

   Button {
       activeImageIndex += 1
   } label: {
      Image(images[activeImageIndex])
   }

推荐答案

我们可以简单地使用Combine的delay()运算符.

import SwiftUI
import Combine

struct ContentView: View {
    let images = [ "square.and.arrow.up", "pencil.circle.fill", "moon.stars.fill"]
    @State private var activeImageIndex = 0
    @State private var cancellable: AnyCancellable? = nil
    
    var body: some View {
        Button {
            cancellable = [0,1,2].publisher
                .flatMap(maxPublishers: .max(1)) { Just($0).delay(for: 3, scheduler: RunLoop.main) } //<- delay for: 3 sec
                .sink { value in
                    activeImageIndex = value
                }
            
        } label: {
            Image(systemName: images[activeImageIndex])
                .animation(.easeIn, value: activeImageIndex)
        }
    }
}

Swift相关问答推荐

WWDC Swift并发会话中的厨房服务示例令人困惑

在列表项内的NavigationLink中的按钮无法正常工作

从`compactMap()`闭包返回`nil`未通过结果类型判断

以编程方式使UIView居中,而不影响UIKit中其他UI类的位置

';NSInternal不一致异常';,原因:';可见导航栏Xcode 15.0 Crash请求布局

如何在macOS中延迟退出应用程序的退出操作?

如何写一个;风格;视图修饰符,它会影响特定类型的所有嵌套视图?

循环字典中的数组

使用`JSONSerialiser`时,省略通用可选项

可以使 Swift init 仅可用于 Objective C 吗?

从一个范围减go 多个范围

如何在类中打印函数

try 制作一个 Swift 扩展来替换字符串中的多次出现

不要从 NumberFormatter 获取货币符号

Swift:连接两个数组而不重复共享后缀/前缀

使用 swift 运行 pod install 时出错

EXC_BREAKPOINT 崩溃的原因范围

Swift 动画 WithDuration 语法是什么?

Type 应该采用什么协议来让泛型函数将任何数字类型作为 Swift 中的参数?

显示 UIAlertController 的简单 App Delegate 方法(在 Swift 中)