ios SwiftUI:完成后将视图缩放回初始状态?

qlfbtfca  于 10个月前  发布在  iOS
关注(0)|答案(1)|浏览(127)

我有这样一个简单的观点:

struct ContentView: View {
    
    @State private var scale:Double = 1
    
    var body: some View {
        
        Rectangle()
            .fill(.red)
            .frame(width: 200, height: 200)
            .scaleEffect(scale)
            .animation(Animation.easeInOut(duration: 1).repeatCount(4, autoreverses: true).delay(1), value: scale)
            .onAppear {
                scale = 1.2
            }

    }
    
}

字符串
它产生了这个动画:


的数据
您会注意到,在动画结束时,它捕捉到比例1.2,因为这是状态比例效果的值。
我想在出现时触发缩放动画,并使其从状态1到1.2“脉冲”4次,然后返回4次。现在它确实从缩放1开始,脉冲,但在结束时它会捕捉到1.2。我如何修复此问题,以便它创建一个从1开始,缩放到1.2并返回4次的“脉冲”动画?

mwkjh3gx

mwkjh3gx1#

供将来参考,在iOS 17中,withAnimation()函数现在包括一个完成回调,当动画完成时执行。
在前面的场景中,当动画完成时,你应该将视图返回到它的初始状态。因为你想要四次重复,所以你需要从完成回调中减去一次重复,因为它将在动画完成一次后被调用。下面是修改后的代码:

struct ContentView: View {
    @State private var scale: Double = 1

    var body: some View {
        Rectangle()
            .fill(.red)
            .frame(width: 200, height: 200)
            .scaleEffect(scale)
            .onAppear {
                withAnimation(Animation.easeInOut(duration: 1).repeatCount(3, autoreverses: true).delay(1)) {
                    scale = 1.2
                } completion: {
                    withAnimation(Animation.easeInOut(duration: 1)) {
                        scale = 1
                    }
                }
            }
    }
}

字符串
结果:


的数据

相关问题