SwiftUI最强大的功能之一是能够自定义视图的显示和隐藏方式。以前,您已经了解了如何使用常规if条件有条件地包含视图,这意味着当条件更改时,我们可以从视图层次结构中插入或移除视图。
转换控制插入和删除的方式,我们可以使用内置转换,以不同的方式组合它们,甚至创建完全自定义的转换。
为了演示这一点,这里有一个带有按钮和矩形的VStack:
struct ContentView: View { var body: some View { VStack { Button("Tap Me") { // do nothing } Rectangle() .fill(Color.red) .frame(width: 200, height: 200) } } }我们可以让矩形只有满足一定的条件时才能出现。首先,我们添加一些可以操作的状态:
@State private var isShowingRed = false接下来,我们使用该状态作为显示矩形的条件:
if isShowingRed { Rectangle() .fill(Color.red) .frame(width: 200, height: 200) }最后,我们可以在按钮的点击事件中将isShowingRed在“true”和“false”之间切换:
self.isShowingRed.toggle()如果你运行程序,你会看到按下按钮显示或者隐藏红色方块。没有动画;它只是突然出现和消失。
通过使用withAnimation()包装状态更改,我们可以获得SwiftUI的默认视图转换,如下所示:
withAnimation { self.isShowingRed.toggle() }有了这个小小的改变,应用程序现在淡入淡出红色矩形,同时向上移动按钮以腾出空间。看起来不错,但是我们可以使用transition()修饰符做得更好。
例如,我们可以通过向矩形添加transition()修饰符使其上下缩放,如图所示:
Rectangle() .fill(Color.red) .frame(width: 200, height: 200) .transition(.scale)现在点击按钮看起来好多了:当按钮腾出空间时,矩形会放大,当再次点击时,矩形会缩小。(PS: 直接在Canvas运行效果可能有差别,所以还是在模拟器或者真机运行查看实际效果吧)
如果你想尝试的话,你可以尝试一些其他的转换。一个有用的方法是不对称,它允许我们在显示视图时使用一个转换,在视图消失时使用另一个转换。若要尝试,请将矩形的现有过渡替换为:
.transition(.asymmetric(insertion: .scale, removal: .opacity))译自Showing and hiding views with transitions
---来自腾讯云社区的---韦弦zhy
微信扫一扫打赏
支付宝扫一扫打赏