- SwiftUI 教程
- SwiftUI - 首页
- SwiftUI - 概述
- SwiftUI vs UIKit
- SwiftUI 环境
- SwiftUI - 环境设置
- SwiftUI - 基本组件
- SwiftUI - 构建第一个应用程序
- SwiftUI 视图
- SwiftUI - 视图
- SwiftUI - 自定义文本视图
- SwiftUI - 自定义图像视图
- SwiftUI - 堆栈
- SwiftUI 绘制形状
- SwiftUI - 形状
- SwiftUI - 绘制线条
- SwiftUI - 绘制矩形
- SwiftUI - 绘制圆角矩形
- SwiftUI - 绘制三角形
- SwiftUI - 绘制圆形
- SwiftUI - 绘制星形
- SwiftUI - 绘制多边形
- SwiftUI - 绘制饼图
- SwiftUI - 使用内置形状
- SwiftUI - 文本
- SwiftUI - 文本视图
- SwiftUI - 文本输入和输出
- SwiftUI - 颜色
- SwiftUI - 颜色
- SwiftUI - 颜色选择器
- SwiftUI - 渐变
- SwiftUI - 调整颜色
- SwiftUI - 效果
- SwiftUI - 效果
- SwiftUI - 混合效果
- SwiftUI - 模糊效果
- SwiftUI - 阴影效果
- SwiftUI - 悬停效果
- SwiftUI - 动画
- SwiftUI - 动画
- SwiftUI - 创建动画
- SwiftUI - 创建显式动画
- SwiftUI - 多个动画
- SwiftUI - 过渡
- SwiftUI - 非对称过渡
- SwiftUI - 自定义过渡
- SwiftUI - 图片
- SwiftUI - 图像
- SwiftUI - 图片作为背景
- SwiftUI - 旋转图像
- SwiftUI - 媒体
- SwiftUI - 视图布局
- SwiftUI - 视图布局
- SwiftUI - 视图大小
- SwiftUI - 视图间距
- SwiftUI - 视图填充
- SwiftUI - 列表和表格
- SwiftUI - 列表
- SwiftUI - 静态列表
- SwiftUI - 动态列表
- SwiftUI - 自定义列表
- SwiftUI - 表格
- SwiftUI - 表单
- SwiftUI - 表单
- SwiftUI - 将表单分解为多个部分
- SwiftUI 有用资源
- SwiftUI - 有用资源
- SwiftUI - 讨论
SwiftUI - 非对称过渡
非对称过渡是一种特殊的过渡类型,使用它我们可以为视图的出现和消失指定不同的过渡方式。例如,视图的出现使用滑动过渡,而视图的消失使用不透明度过渡。此方法用于 `.transition()` 修饰符内。
语法
以下是语法:
static func asymmetric(insertion: AnyTransition, removal: AnyTransition) -> AnyTransition
参数
此方法采用以下参数:
insertion: 表示视图的插入过渡。
removal: 表示视图的移除过渡。
示例 1
在下面的 SwiftUI 程序中,我们将非对称过渡应用于圆角矩形。此处圆角矩形使用滑动过渡进入,并使用不透明度过渡退出屏幕。
import SwiftUI
struct ContentView: View {
@State private var anime = false
var body: some View {
ZStack{
if anime{
RoundedRectangle(cornerRadius: 10)
.fill(.red)
.frame(width: 150, height: 100)
// Here we apply asymmetric transition on the shape
.transition(.asymmetric(insertion: .slide, removal: .opacity))
}
}.padding(30)
Button("Click Me"){
withAnimation(.default){
anime.toggle()
}
}.font(.title).foregroundStyle(.brown)
}
}
#Preview {
ContentView()
}
输出
示例 2
在下面的 SwiftUI 程序中,我们为两种(真和假)状态更改应用不同的非对称过渡。
import SwiftUI
struct ContentView: View {
@State private var anime = false
var body: some View {
ZStack{
if anime{
RoundedRectangle(cornerRadius: 10)
.fill(.red)
.frame(width: 150, height: 100)
// Here we apply asymmetric transition on the shape
.transition(.asymmetric(insertion: .slide, removal: .push(from: .top)))
}else{
RoundedRectangle(cornerRadius: 10)
.fill(.yellow)
.frame(width: 150, height: 100)
// Here we apply asymmetric transition on the shape
.transition(.asymmetric(insertion: .push(from: .top), removal: .slide))
}
}.padding(30)
Button("Click Me"){
withAnimation(.default){
anime.toggle()
}
}.font(.title).foregroundStyle(.brown)
}
}
#Preview {
ContentView()
}
输出
广告