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