如何使诸如文本字段之类的元素连续放大然后缩小?
我有这个:
struct ContentView : View {
@State var size:Double = 0.5
var body: some View {
ZStack {
Text("Hello!")
.padding()
.scaleEffect(size)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我知道我需要增加大小,然后在某种循环中减少它,但在 SwiftUI 中无法完成以下操作:
while true {
self.size += 0.8
sleep(0.2)
self.size -= 0.8
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*n R 12
一种可能的解决方案是使用(重复、自动反转)动画:
struct ContentView : View {
@State var size: CGFloat = 0.5
var repeatingAnimation: Animation {
Animation
.easeInOut(duration: 2) //.easeIn, .easyOut, .linear, etc...
.repeatForever()
}
var body: some View {
Text("Hello!")
.padding()
.scaleEffect(size)
.onAppear() {
withAnimation(self.repeatingAnimation) { self.size = 1.3 }
}
}
}
Run Code Online (Sandbox Code Playgroud)
Animation.basic 已弃用。基本动画现在以其曲线类型命名:如线性等:
var foreverAnimation: Animation {
Animation.linear(duration: 0.3)
.repeatForever()
}
Run Code Online (Sandbox Code Playgroud)
来源:https : //forums.swift.org/t/swiftui-animation-basic-duration-curve-deprecated/27076
最好的方法是创建单独的动画结构并配置您需要的所有选项(这样您的代码将更加紧凑)。
为了使其更加清晰和合乎逻辑,请使用 @State 属性isAnimating。您将能够停止动画并再次恢复并了解动画何时进行。
@State private var isAnimating = false
var foreverAnimation: Animation {
Animation.linear(duration: 0.3)
.repeatForever()
}
var body: some View {
Text("Hello")
.scaleEffect(isAnimating ? 1.5 : 1)
.animation(foreverAnimation)
.onAppear {
self.isAnimating = true
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7087 次 |
| 最近记录: |