我一直在努力实现两个令我头疼的主要目标。对不起,如果这是一个简单的修复,我对 swift/swiftui 还是有点陌生
@State根据经过的时间触发改变值。我搜索了 Stack Overflow 并找到了建议使用计时器的答案:
struct CurrentDateView : View {
@State var now = Date()
let timer = Timer.publish(every: 1, on: .current, in: .common).autoconnect()
var body: some View {
Text("\(now)")
.onReceive(timer) {
self.now = Date()
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是我将如何合并它以便@State可以使用类似的东西false在 7.5 秒过去后将我的值更改为:
@State randomTF : Bool = true
Run Code Online (Sandbox Code Playgroud)
或 7.5 秒后Text("Please Enter Above")更改为 Text("Sorry Too Late")
似乎没有一种沿着自定义路径(尤其是弯曲路径)移动视图/形状的直观方法。我发现了几个 UIKit 库,它们允许视图在 Bézier 路径(DKChainableAnimationKit、TweenKit、Sica 等)上移动,但我不太习惯使用 UIKit 并不断遇到错误。
目前使用 swiftUI 我手动这样做:
import SwiftUI
struct ContentView: View {
@State var moveX = true
@State var moveY = true
@State var moveX2 = true
@State var moveY2 = true
@State var rotate1 = true
var body: some View {
ZStack{
Circle().frame(width:50, height:50)
.offset(x: moveX ? 0:100, y: moveY ? 0:100)
.animation(Animation.easeInOut(duration:1).delay(0))
.rotationEffect(.degrees(rotate1 ? 0:350))
.offset(x: moveX2 ? 0:-100, y: moveY2 ? 0:-200)
.animation(Animation.easeInOut(duration:1).delay(1))
.onAppear(){
self.moveX.toggle();
self.moveY.toggle();
self.moveX2.toggle();
self.moveY2.toggle();
self.rotate1.toggle();
// self..toggle()
} …Run Code Online (Sandbox Code Playgroud) 当应用程序需要注意并在 Dock 上弹跳时,如何实现类似于 macOS Dock 上的弹跳动画。SwiftUI 似乎只有缓动曲线和弹簧,它们并没有真正强调反弹的方式。我尝试了各种弹簧动画以及缓动曲线和时序曲线的组合来尝试使弹跳动画正常工作,但没有真正做到这一点。
最接近反弹动画的是插值弹簧,但这些动画的主要问题是它们在动画过程中过冲,而反弹动画则不会。
struct ContentView: View {
@State var bounce = false
@State private var initialVelocity:Double = 1
@State private var damping:Double = 1
@State private var stiffness:Double = 1
var body: some View {
VStack {
Circle().fill(Color.red).frame(width:50,height:50)
.offset(y: bounce ? 0 : -80)
.animation(.interpolatingSpring(stiffness: self.stiffness, damping: self.damping, initialVelocity: self.initialVelocity))
HStack(){
Text("stiffness")
Slider(value: $stiffness, in: 0...100)
}
HStack(){
Text("damping")
Slider(value: $damping, in: 0...100)
}
HStack(){
Text("initialVelocity")
Slider(value: $initialVelocity, in: 0...100)
}
Button("Animate" ){
self.bounce.toggle()
} …Run Code Online (Sandbox Code Playgroud)