我希望屏幕上有某种“徽章”,当条件满足时,它会反复从正常大小跳变到更大,然后回到正常大小,直到不再满足条件。我...
我希望屏幕上有一个“徽章”,当条件满足时,它会反复从正常大小弹跳到更大再回到正常大小,直到条件不再满足。但我似乎无法让徽章停止“弹跳”。 一旦开始,就无法停止。
我尝试过的方法: 我尝试过使用一些动画,但它们可以分为使用“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
}
}
}
如何使用交易
在下面的代码中,我根据状态关闭或打开动画 active
警告: 请务必使用 withAnimation
,否则将不起作用
@State var active: Bool = false
var body: some View {
Circle()
.scaleEffect(active ? 1.08: 1)
.animation(Animation.default.repeatForever(autoreverses: true), value: active)
.frame(width: 100, height: 100)
.onTapGesture {
useTransaction()
}
}
func useTransaction() {
var transaction = Transaction()
transaction.disablesAnimations = active ? true : false
withTransaction(transaction) {
withAnimation {
active.toggle()
}
}
}