swiftui - SwiftUI - 如何从其他视图触发动画
问题描述
我想使用一个按钮来触发矩形上的动画,但我不知道如何从不是调用动画的对象调用动画。
var body: some View {
GeometryReader { fullView in
ScrollView() {
VStack{
Rectangle()
.foregroundColor(.white)
.frame(width: 150, height: 150)
Button(action: {
print("Here")
//Trigger animation here
}){
Text("Button")
}
Spacer()
}
}
}
}
}
这是我使用的通用代码。
解决方案
您可以只更改块中@State
变量的值。withAnimation(_:_:)
这是一个更简单的版本,有两个选项:
- 缩放和更改布局
- 缩放而不改变布局
代码:
struct ContentView: View {
@State private var scale: CGFloat = 1
var body: some View {
VStack {
Rectangle()
.frame(width: 150 * scale, height: 150 * scale) // 1
// .frame(width: 150, height: 150) // 2
// .scaleEffect(scale) // 2
Button("Button") {
print("Here")
//Trigger animation here
withAnimation {
scale = 2.5 - scale
}
}
Spacer()
}
}
}
2.5
来自1 + TARGET_SCALE
. _ 1 -> 1.5, 1.5 -> 1
.
推荐阅读
- c++ - 如何在 C++ 中增加数组值?
- python - Pandas:将列标题转换为行标签
- zlib - 如何使用 zlib 计算 CRC32-C 校验和
- node.js - 解析多部分/相关响应并将附件保存到文件
- eclipse - 如何更改 Eclipse Neon.3 中的 Google App Engine SDK 位置?
- wordpress - 全宽菜单 Wordpress
- vagrant - Vagrant up 失败并显示警告:远程连接断开。重试
- javascript - 如何在 tabNavigator 中重新加载屏幕?
- javascript - Wordpress Envira Gallery 不会以禁止状态加载
- tsql - 如何基于 T-SQL 中的函数使用 COLLATE?