SwiftUI 教程

SwiftUI 主页 SwiftUI 概览 SwiftUI 与 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 BLur 效果 SwiftUI 阴影效果 SwiftUI 悬停效果

SwiftUI 动画

SwiftUI 动画 SwiftUI 创建动画 SwiftUI 创建显式动画 SwiftUI 多个动画 SwiftUI 过渡 SwiftUI 不对称过渡 SwiftUI 自定义过渡

SwiftUI 图像

SwiftUI 图像 SwiftUI 图像作为背景 SwiftUI 旋转图像 SwiftUI 媒体

SwiftUI 视图布局

SwiftUI 视图布局 SwiftUI 视图大小 SwiftUI 视图间距 SwiftUI 视图填充

SwiftUI UI 控件

SwiftUI UI 控件 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 跨平台 UI SwiftUI 数据 SwiftUI 可访问性

SwiftUI 框架集成

SwiftUI 框架集成 SwiftUI 与 UIKit 交互 SwiftUI 创建 macOS 应用

SwiftUI 有用资源

SwiftUI 有用资源 SwiftUI 讨论


SwiftUI - 过渡

过渡是在视图层次结构中插入或移除视图时应用于视图的特殊效果。或者我们可以说,它们通常用于确定视图如何进入或退出屏幕。它们就像我们在视频开头和结尾应用的过渡效果一样。

过渡可以应用于那些响应状态变化的视图,这意味着它们只有在附加动画时才能进行动画处理,它们不能与那些在屏幕上保持可见的同时改变其属性的视图一起使用。在本章中,我们将学习如何应用过渡、不同类型的过渡以及有关过渡的更多信息。

SwiftUI 中的".transition"修饰符

.transition修饰符用于将过渡附加到给定的视图。当指定的视图出现或从屏幕上移除时,将应用转换。

语法

以下是语法 −

func transition(_ t: AnyTransition) -> some View

它只接受一个参数,即我们想要在视图上应用的转换类型。其值可以是:.opacity、.identity、.move、.offset、.push、.scale、.slide、.asymmetric 和 .combine。

如何在 SwiftUI 中应用过渡

要在视图上应用过渡效果,我们必须遵循以下步骤 −

  • 步骤 1:创建一个状态变量来控制视图的外观。
  • 步骤 2:根据给定的条件使用 if 或 switch 状态添加或删除视图。
  • 步骤 3:将 .transition() 修饰符应用于我们想要动画的视图。
  • 步骤 4:将视图的外观包装在动画中,通常用于withAnimation()。

示例

在下面的 SwiftUI 程序中,我们在 Text 视图上应用 blurReplace 过渡效果。

import SwiftUI
struct ContentView: View {    
   @State private var myState = false    
   var body: some View {    
      ZStack{            
         Circle().fill(.indigo).frame(width: 250, height: 250)
         if myState{
            Text("TutorialsPoint").foregroundStyle(.white)
            .font(.largeTitle).transition(.blurReplace)
         }
      }.padding(30)
      Button("Click Me"){
         withAnimation(.default){
            myState.toggle()
         }
      }.font(.title)
   }
}
#Preview {
   ContentView()
}

输出

Transition

SwiftUI 中的过渡类型

在 SwiftUI 中,我们使用以下内置过渡来为视图的外观设置动画 −

  • Identity 过渡:这是默认过渡。它简单地显示视图,没有任何特殊过渡。

    transition(.identity)
    
  • 移动过渡:此过渡将子视图移离或移向父视图的给定边缘。它可以在多个方向工作,例如顶部、底部、前导和尾部。

    transition(.move(edge:.top))
    
  • 偏移过渡:此过渡通过将视图移动到给定的偏移值来为视图设置动画。

    transition(.offset(x:1.1, y: 2.2))
    
  • 不透明度过渡:此过渡对给定视图应用淡入淡出效果。

    transition(.opacity)
    
  • 推动过渡:此过渡为插入动画通过在淡入时将视图移入指定边缘来动画化视图,并通过在淡出视图时将其移出指定边缘的另一侧(例如顶部、按钮、尾部和前部)来动画化视图的移除。

    transition(.push(edge:.top))
    
  • 缩放过渡:此过渡在进入屏幕时增加视图的大小,在离开屏幕时减小视图的大小。我们还可以使用锚点参数控制过渡开始的位置。

    transition(.scale(scale:23, anchore:UniPoint(x:2, y:1)))
    
  • 滑动过渡:此过渡将视图从左向右移动。或者我们可以说它在将视图移动到前缘时插入视图,并通过移出到后缘将其移除。

    transition(.slide)
    
  • 非对称过渡:此过渡允许使用创建复合过渡,这意味着视图使用不同的过渡进行插入和移除。

    transition(.asymmetric(insertion:.slide, removal:.scale))
    
  • 模糊和替换过渡:此过渡允许使用通过将模糊和缩放效果相互混合来为视图的开始和移除制作动画。

    transition(.blurReplace)
    
  • 符号效果过渡:此过渡在插入和移除视图时对符号图像应用默认符号效果。它仅适用于符号图像。

    transition(.symbolEffect)
    

示例 1

在下面的 SwiftUI 程序中,我们将幻灯片过渡应用于文本视图。

import SwiftUI

struct ContentView: View {
   @State private var anime = false
   var body: some View {
      ZStack {
         Circle().fill(.indigo).frame(width: 250, height: 250)
         if anime {
            Text("TutorialsPoint")
               .foregroundStyle(.white)
               .font(.largeTitle)
               // 在文本视图上应用幻灯片过渡
               .transition(.slide)
         }
      }.padding(30)

      Button("Click Me") {
         withAnimation(.default) {
            anime.toggle()
         }
      }
      .font(.title)
   }
}

#Preview {
   ContentView()
}

输出

Transition

示例 2

在下面的 SwiftUI 程序中,我们将推送过渡应用于 Shape 视图。

import SwiftUI
struct ContentView: View {
   @State private var anime = false
   var body: some View {
      VStack {
         if anime {
            Circle().fill(.indigo).frame(width: 250, height: 250)

               // 在形状视图上应用推送过渡
               // 这里的形状将从视图的顶部出现
               .transition(.push(from: .top))
         }
      }.padding(30)

      Button("Click Me") {
         withAnimation(.default) {
            anime.toggle()
         }
      }.font(.title)
   }
}

#Preview {
   ContentView()
}

输出

Transition

在 SwiftUI 中组合过渡

在 SwiftUI 中,我们可以组合多个过渡来创建新的效果。这可以通过在 .transition() 修饰符中使用 .combine 作为参数来实现。

语法

以下是语法 −

func transition(.combine(with: AnyTransition)) -> some View

with 参数的值可以是:.opacity、.identity、.move、.offset、.push、.scale、.slide、.asymmetric、.combine、.blurReplace 和 .symbolEffect。

示例

在下面的 SwiftUI 程序中,我们将推送过渡应用于 Shape 视图。

import SwiftUI

struct ContentView: View {
   @State private var anime = false
   var body: some View {
      ZStack {
         Rectangle().stroke(.indigo, lineWidth: 5).frame(width: 250, height: 100)
         if anime {
            Text("TutorialsPoint")
               .foregroundStyle(.indigo)
               .font(.largeTitle)
               .transition(.push(from: .leading).combined(with: .scale))
         }
      }.padding(30)
      Button("Click Me") {
         withAnimation(.default) {
            anime.toggle()
         }
      }.font(.title).foregroundStyle(.brown)
   }
}
#Preview {
   ContentView()
}

输出

Transition