IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> SwiftUI ? Animation -> 正文阅读

[移动开发]SwiftUI ? Animation

简述

官方文档表示 No overview available. 没有简述,其实顾名思义:动画

SwiftUI 中的动画相较于 UIKit 中的使用简化了很多。基本两个方法即可完成

@State var degrees: Double = 0

Text("Animation")
	.rotationEffect(.degrees(degrees))
	.animation(.linear(duration: 1).repeatForever())

上面代码的动画为旋转一定角度,在1秒内线性完成,并且重复该动画。

那么,如果我想使 Text 连续不断的顺时针旋转,这段代码可以实现吗?

答案是:不能

Animation

曾经作者想做一个 loading 视图,并使用 Image 视图做旋转用,发现最后的结果是,Image 会从 (0, 0) 点动画到布局的位置,然后再从动画的位置动画的 (0, 0) 点,如此往复。

  • repeatForever() :重复之前的动画,如果这个动画是在1秒钟完成,那么重复的动画也会在1秒钟完成,并且与原路径返回。
  • animation() :在视图初始化后即刻开始动画,即动画将从视图的 (0, 0) 点开始。

那么如何解决这个问题呢?

  1. 删除 .animation() 函数。
  2. 使用 withAnimation<Result>(_ animation: Animation? = .default, _ body: () throws -> Result) 函数,该函数可以在页面创建后进行调用。
  3. 多次调用 withAnimation 函数,修改 degrees 值,使视图旋转。
	@State var degrees: Double = 0
    @Binding var isShow: Bool
    
    let timer = Timer.publish(every: 0.1, on: .main, in: .common).autoconnect()
    
    var body: some View {
        VStack {
            if isShow {
                Image("loading")
                    .resizable()
                    .aspectRatio(contentMode: .fit)
                    .frame(width: 72)
                    .clipShape(Circle())
            } else {
                Spacer()
            }
        }
        .ignoresSafeArea()
        .rotationEffect(.degrees(degrees))
        .onReceive(timer) { _ in
            withAnimation(.linear(duration: 1)) {
                self.degrees += 33
            }
        }

作者使用定时器进行 withAnimation 的函数调用。

其他动画函数

  • 3D 动画,沿指定的 x, y, z 轴进行旋转
@inlinable public func rotation3DEffect(_ angle: Angle, axis: (x: CGFloat, y: CGFloat, z: CGFloat), anchor: UnitPoint = .center, anchorZ: CGFloat = 0, perspective: CGFloat = 1) -> some View
  • 相对于描点,按给定的比例进行缩放
@inlinable public func scaleEffect(_ scale: CGSize, anchor: UnitPoint = .center) -> some View

@inlinable public func scaleEffect(_ s: CGFloat, anchor: UnitPoint = .center) -> some View

@inlinable public func scaleEffect(x: CGFloat = 1.0, y: CGFloat = 1.0, anchor: UnitPoint = .center) -> some View

其实动画说白了就是动态的修改视图的值。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:23:00  更:2022-09-04 01:25:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 5:03:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码