【问题标题】:How can I create a smooth colour change animation using swiftUI? (Example in question)如何使用 swiftUI 创建平滑的颜色变化动画? (有问题的例子)
【发布时间】:2021-07-08 09:42:00
【问题描述】:

我有一个播放/暂停按钮,按下时会发生变化。目前它只是淡入淡出,但我希望它执行一个看起来新颜色流过旧颜色的动画。

这是我目前所拥有的:

if(meditationViewModel.timerIsRunning){
    HStack{
        Image(systemName: "pause")
        Text("STOP")
            .bold()
     }
      .padding()
      .foregroundColor(.white)
      .background(Color.red)
      .cornerRadius(25)
      .shadow(radius: 20)
}else{
    HStack{
        Image(systemName: "play")
        Text("PLAY")
            .bold()
    }
     .padding()
     .foregroundColor(.white)
     .background(Color.green)
     .cornerRadius(25)
}

meditationViewModel.timerIsRunning 的变化发生在别处。

【问题讨论】:

    标签: swift animation button swiftui


    【解决方案1】:

    这是一个可能方法的演示 - 只需在文本和不透明背景之间使用一些形状(在本例中为圆形)并根据状态移动它。

    使用 Xcode 12.4 / iOS 14.4 准备

    注意:您可以只使用轻点手势而不是按钮来调整所有参数和颜色,但总体思路保持不变

    struct DemoView: View {
        @State private var playing = false
        var body: some View {
            Button(action: { playing.toggle() }) {
                HStack{
                    Image(systemName: playing ? "pause" : "play")
                    Text(playing ? "STOP" : "PLAY")
                        .bold()
                }
                .background(
                    Circle().fill(Color.purple)
                        .frame(width: 160, height: 160, alignment: .leading)
                        .blur(radius: 3)
                        .offset(x: playing ? 0 : -160, y: -40)
                        .animation(.easeInOut(duration: 1), value: playing)
                )
                .padding()
                .foregroundColor(.white)
                .background(Color.green)
                .cornerRadius(25)
                .clipped()
                .shadow(radius: 20)
            }
        }
    }
    

    【讨论】:

    • 很好的解决方案!看起来很棒
    猜你喜欢
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多