8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

SwiftUI:停止永远重复的动画

BJonas88 1月前

41 0

我希望屏幕上有某种“徽章”,当条件满足时,它会反复从正常大小跳变到更大,然后回到正常大小,直到不再满足条件。我...

我希望屏幕上有一个“徽章”,当条件满足时,它会反复从正常大小弹跳到更大再回到正常大小,直到条件不再满足。但我似乎无法让徽章停止“弹跳”。 一旦开始,就无法停止。

我尝试过的方法: 我尝试过使用一些动画,但它们可以分为使用“repeatForever”来实现所需效果的动画和不使用“repeatForever”的动画。例如:

Animation.default.repeatForever(autoreverses: true)

Animation.spring(response: 1, dampingFraction: 0, blendDuration: 1) (将阻尼设置为 0 可使其永远持续下去)

然后用 .animation(nil) 替换它。似乎不起作用。有人有什么想法吗?提前非常感谢!以下是重现它的代码:

struct theProblem: View {
    @State var active: Bool = false

    var body: some View {
        Circle()
            .scaleEffect( active ? 1.08: 1)
            .animation( active ? Animation.default.repeatForever(autoreverses: true): nil )
            .frame(width: 100, height: 100)
            .onTapGesture {
                self.active = !self.active

        }
    }
}
帖子版权声明 1、本帖标题:SwiftUI:停止永远重复的动画
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由BJonas88在本站《ios》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 中的示例时也遇到了类似的问题 Hacking with Swift

    .animation(active ? Animation.default.repeatForever() : Animation.default)

    在 Xcode 13.2.1 上对我来说也不起作用。我找到的解决方案是将动画封装在自定义 ViewModifier 中。下面的代码说明了这一点;大按钮在活动和非活动动画之间切换。

    `

    struct ContentView: View {
        @State private var animationAmount = 1.0
        @State private var animationEnabled = false
        
        var body: some View {
            VStack {
                
                Button("Tap Me") {
                    // We would like to stop the animation
                    animationEnabled.toggle()
                    animationAmount = animationEnabled ? 2 : 1
                }
                .onAppear {
                    animationAmount = 2
                    animationEnabled = true
                }
                .padding(50)
                .background(.red)
                .foregroundColor(.white)
                .clipShape(Circle())
                .overlay(
                    Circle()
                        .stroke(.red)
                        .scaleEffect(animationAmount)
                        .opacity(2 - animationAmount)
                )
                .modifier(AnimatedCircle(animationAmount: $animationAmount, animationEnabled: $animationEnabled))
            }
        }
    }
    
    struct AnimatedCircle: ViewModifier {
        @Binding var animationAmount: Double
        @Binding var animationEnabled: Bool
        func body(content: Content) -> some View {
            if animationEnabled {
                return content.animation(.easeInOut(duration: 2).repeatForever(autoreverses: false),value: animationAmount)
            }
            else {
                return content.animation(.easeInOut(duration: 0),value: animationAmount)
            }
        }
    }
    

    `

    这可能不是最好的解决方案,但它确实有效。我希望它能帮助到一些人。

返回
作者最近主题: