image - 动画在 AnyTransition SwiftUI 上不起作用

标签 image swiftui ios-animations

我目前在一个功能上使用 SwiftUI,其中图像列表会自动更改,并且每个图像都有不透明度动画。

虽然我目前已成功实现过渡,但无论我如何尝试,不透明动画都不起作用。

有人可以帮我解决这个问题吗...

我正在处理的代码如下:

//
//  EpilogueThree.swift
//

import SwiftUI

struct EpilogueThree: View {
    let images = ["1", "2", "3"]
    let imageChangeTimer = Timer.publish(every: 3, on: .main, in: .common).autoconnect()
    let transition = AnyTransition.asymmetric(insertion: .slide, removal: .scale).combined(with: .opacity)
    @State private var imagePage = 2
    @State private var currentImageIndex = 0
    var body: some View {
        ZStack {
            VStack {
                Text("Page: \(imagePage)")
                    .font(.largeTitle)
                    .foregroundColor(.white)
                    .padding(.horizontal, 20)
                    .padding(.vertical, 5)
                    .background(.black.opacity(0.75))
                Image(images[currentImageIndex])
                    .resizable()
                    .ignoresSafeArea()
                    .transition(transition)
                    .onReceive(imageChangeTimer) { _ in
                        if imagePage > 0 {
                            self.currentImageIndex = (self.currentImageIndex + 1) % self.images.count
                            imagePage -= 1
                        }
                    }
            }
        }
    }
}

struct EpilogueThree_Previews: PreviewProvider {
    static var previews: some View {
        EpilogueThree()
            .previewInterfaceOrientation(.landscapeRight)
    }
}

当前代码的行为如下: enter image description here

但是我想要的代码需要执行以下操作: enter image description here

最佳答案

在这种情况下,我们可以通过添加id(新id - 新 View )来使图像可移动,并将动画添加到容器...以实现动画。

这是固定部分。使用 Xcode 13.4/iOS 15.5 进行测试

VStack {

// .. other code

    Image(images[currentImageIndex])
        .resizable()
        .ignoresSafeArea()
        .id(imagePage)           // << here !!
        .transition(transition)
        .onReceive(imageChangeTimer) { _ in
            if imagePage > 0 {
                self.currentImageIndex = (self.currentImageIndex + 1) % self.images.count
                imagePage -= 1
            }
        }
}
.animation(.default, value: imagePage)  // << here !!

关于image - 动画在 AnyTransition SwiftUI 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72591037/

相关文章:

swiftui - 从 SwiftUI 中的另一个 View 设置 @State var

swift - XCode + Swift : Thread 1: EXC_BAD_ACCESS (code=2, 地址=0x7ffee99cdfd8)

textfield - SwiftUI:是否可以关闭TextField的预测文本

ios - 如何在 UIPageViewContoller 中滑动时移动 UIImageView

python - 边缘检测后从各个方向裁剪图像

android - 在 Android 应用程序中生成条形码图像

ios - UiView.animateWithDuration 不是动画 Swift

php - 将图像放在另一图像的左下角

java - 使用 Apache POI XSLF 在单张幻灯片中的指定位置附加 3 个图像