尝试制作SwiftUI
动画的动画。第一次可以完美运行,但是什么也不做。
self.pressed
的开头为false
。我将其设置为true
,然后将其切换回false
。
我想按比例放大,然后在按下按钮时按比例缩小。
我在这里想念什么?
Button(action: {
withAnimation(.linear(duration: 3)) {
self.pressed = true
}
withAnimation(.linear(duration: 3)) {
self.pressed = false
}
}) {
Wedge(startAngle: .init(degrees: 270), endAngle: .init(degrees: 360))
.fill(Color.green)
.frame(width: 200, height: 200)
.offset(x: -100, y: 100)
.scaleEffect(self.pressed ? 1.2 : 1.0)
}
基本上,当我按下它时,它将调整我的楔形形状的大小,但是下次我按下时它什么也没做。
我确实可以将其与DispatchQueue
一起使用,但似乎很容易破解:
Button(action: {
withAnimation(.linear(duration: 0.5)) {
self.pressed = !self.pressed
}
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
withAnimation(.linear(duration: 0.5)) {
self.pressed = !self.pressed
}
}
}) {
Wedge(startAngle: .init(degrees: 180), endAngle: .init(degrees: 270))
.fill(Color.red)
.frame(width: 200, height: 200)
.offset(x: 80, y: 80)
.scaleEffect(self.pressed ? 1.2 : 1.0)
}
第二种方法是正确的方法吗?
-
这是楔子:
struct Wedge: Shape {
let startAngle: Angle
let endAngle: Angle
func path(in rect: CGRect) -> Path {
var path = Path()
let center = CGPoint(x: rect.midX, y: rect.midY)
path.addArc(center: center,
radius: min(rect.midX, rect.midY),
startAngle: startAngle,
endAngle: endAngle,
clockwise: false )
path.addLine(to: center)
path.closeSubpath()
return path
}
}
答案 0 :(得分:1)
可能您想要这个
Button(action: {
withAnimation(.linear(duration: 3)){
self.pressed.toggle() // << here !!
}
print("B")
}) {
...