SwiftUI View 在意想不到的路径上动画

标签 swift animation swiftui

我制作了以下 PulsatingView:

struct PulsatingView: View {
    
    @State private var opacity = 0.7
    @State private var scale: CGFloat = 0.5

    var body: some View {
        VStack {
            ZStack {
                Circle()
                    .fill(Color.black.opacity(opacity))
                    .animation(.easeInOut(duration: 2).delay(1.5).repeatForever(autoreverses: false))
                    .frame(width: 7, height: 7)
                    .scaleEffect(scale)
                    .animation(.easeIn(duration: 2.5).delay(1).repeatForever(autoreverses: false))
                Circle()
                    .fill(Color.black)
                    .frame(width: 7, height: 7)
            }
        }
        .onAppear {
            opacity = 0
            scale = 5
        }
    }
}

它产生以下结果:(点击查看动画;它是一个 .gif)

pulsating view screencast

但是,当我将它添加到 View 中时,例如在 VStack 中,会发生这种情况:(单击以查看动画;它是一个 .gif)

pulsating view glitch

我不知道为什么会这样,也不知道该如何解决。我已经尝试添加诸如 .fixedSize(horizo​​ntal: true, vertical: true).frame(width: 50, height: 50) 之类的修饰符,但是没有帮助。

有人知道这是怎么回事吗?

最佳答案

尝试使用具有连接值的动画,例如

Circle()
    .fill(Color.black.opacity(opacity))
    .animation(.easeInOut(duration: 2).delay(1.5).repeatForever(autoreverses: false), value: opacity) // << here !!
    .frame(width: 7, height: 7)
    .scaleEffect(scale)
    .animation(.easeIn(duration: 2.5).delay(1).repeatForever(autoreverses: false), value: scale)    // << here !!

重要提示:如果它是在 NavigationView 中启动的,那么动画状态应该被推迟激活。 https://stackoverflow.com/a/66643096/12299030 中提供了原因和调查详情.

关于SwiftUI View 在意想不到的路径上动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69448390/

相关文章:

ios - 从 Swift 中的 iOS 应用程序,如何打开 facebook 应用程序到个人资料页面的特定部分

SwiftUI Macos 搜索栏元素

python - 如何制作高质量的 matplotlib 动画并避免模糊的文本/线条渲染?

android - 计时 fragment 转换 - Android

ios - UICollectionView 中辅助功能的顺序不正确

arrays - Swift 字典数组包含一个 double 值,保存到用户默认值添加小数位

javascript - Angular ng-show ng-hide 动画

firebase - 是否可以在 SwiftUI 应用程序中显示 PDF 缩略图?

macos - SwiftUI:窗口关闭时运行代码 macOS

ios - 在 SwiftUI 中将 Struct 而不是 Class 作为起点有什么好处?