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

SwiftUI:停止永远重复的动画

BJonas88 1月前

45 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)
  • 您的代码没有任何问题,所以我认为这是 Apple 的缺陷。似乎有很多隐式动画(至少在 Xcode 11.2 中)。无论如何...

    我建议考虑下面提供的可实现预期行为的替代方法。

    struct TestAnimationDeactivate: View {
        @State var active: Bool = false
    
        var body: some View {
            VStack {
                if active {
                    BlinkBadge()
                } else {
                    Badge()
                }
            }
            .frame(width: 100, height: 100)
            .onTapGesture {
                self.active.toggle()
            }
        }
    }
    
    struct Badge: View {
        var body: some View {
            Circle()
        }
    }
    
    struct BlinkBadge: View {
        @State private var animating = false
        var body: some View {
            Circle()
                .scaleEffect(animating ? 1.08: 1)
                .animation(Animation.default.repeatForever(autoreverses: true))
                .onAppear {
                    self.animating = true
                }
        }
    }
    
    struct TestAnimationDeactivate_Previews: PreviewProvider {
        static var previews: some View {
            TestAnimationDeactivate()
        }
    }
    
返回
作者最近主题: