加载中,加载中......使用SwiftUI设计2种Loading动画

简介: 加载中,加载中......使用SwiftUI设计2种Loading动画

加载中,加载中......使用SwiftUI设计2种Loading动画


项目背景

iOS客户端开发过程中,在页面加载时或者数据更新时,常常需要一个Loading动画进行过渡,避免交互之间的生硬感。

Loading动画有很多,这里提供两种Loading动画供大家参考。

项目搭建

首先,创建一个新的SwiftUI项目,命名为LoadingView。

image.png

圆点加载

第一种Loading是在页面初始加载时最常见的方式,基本的交互效果是4个圆点在不断缩放,体现出加载中的效果。

image.png

首先我们要声明一个变量控制圆点的缩放,示例:

@State var isAnimation: Bool = false

然后我们构建基础的圆点loading视图,示例:

// 4个圆点加载
func fourDotsLoading() -> some View {
    HStack {
        ForEach(0 ..< 4) { index in
            Circle()
                .fill(Color.green)
                .frame(width: 20, height: 20)
                .scaleEffect(isAnimation ? 1.0 : 0.5)
                .animation(Animation.easeInOut(duration: 0.5)
                    .repeatForever()
                    .delay(Double(index) * 0.2))
        }
    }
}

上述代码中,我们创建了一个新视图fourDotsLoading

我们使用HStack横向布局,使用ForEach循环遍历了4个圆点,使用scaleEffect修饰符跟随着isAnimation变量进行缩放。动画部分,我们让其间隔0.2秒不断循环。

最后,我们在ContentView中使用视图,并且在视图加载时切换isAnimation的状态,示例:

var body: some View {
    fourDotsLoading()
        .onAppear(){
            self.isAnimation.toggle()
        }
}

image.png

圆柱起伏

不错不错,下面我们再学习第二种loading动画,它有点像音乐起伏的效果,几个胶囊形状的圆角矩形不断缩放。

image.png

我们创建一个新的视图展示它,示例:

// 音乐起伏加载
func musicLoading() -> some View {
    HStack(alignment: .center, spacing: 5) {
        ForEach(0 ..< 5) { index in
            Capsule(style: .continuous)
                .fill(Color.green)
                .frame(width: 10, height: 50)
                .scaleEffect(isAnimation ? 0.5 : 1.0)
                .animation(Animation.easeInOut(duration: 0.5)
                    .repeatForever()
                    .delay(Double(index) * 0.1)
                )
        }
    }
}

上述代码中,我们创建了一个新视图musicLoading

我们使用HStack横向视图和ForEach循环遍历创建了5个Capsule胶囊视图,然后使用scaleEffect修饰符让它跟随isAnimation进行缩放。动画部分,同样是间隔0.1秒不断循环。

image.png

恭喜你,完成了本章的全部内容!

快来动手试试吧。


相关文章
SwiftUI—方便用户选择日期的DatePicker日期拾取器
SwiftUI—方便用户选择日期的DatePicker日期拾取器
1892 0
SwiftUI—方便用户选择日期的DatePicker日期拾取器
|
iOS开发
SwiftUI极简教程13:NavigationView导航栏使用
SwiftUI极简教程13:NavigationView导航栏使用
2416 2
SwiftUI极简教程13:NavigationView导航栏使用
|
程序员 索引
SwiftUI极简教程18:SwipeCard卡片滑动效果的使用(上)
SwiftUI极简教程18:SwipeCard卡片滑动效果的使用(上)
1357 0
SwiftUI极简教程18:SwipeCard卡片滑动效果的使用(上)
|
搜索推荐 数据安全/隐私保护
颜值即正义,使用SwiftUI搭建个人信息、账号绑定、通用设置详情页
颜值即正义,使用SwiftUI搭建个人信息、账号绑定、通用设置详情页
358 0
展开&收起,使用SwiftUI搭建一个侧滑展开页面交互
展开&收起,使用SwiftUI搭建一个侧滑展开页面交互
424 0
|
存储 智能硬件
使用SwiftUI搭建一个智能家居的开关灯页面,我是有多无聊~
使用SwiftUI搭建一个智能家居的开关灯页面,我是有多无聊~
159 0
使用SwiftUI搭建一个倒计时App,让你做饭时不再焦虑~
使用SwiftUI搭建一个倒计时App,让你做饭时不再焦虑~
365 0
|
存储 大数据 API
swift 中 Realm 使用详解
当涉及到在 Swift 项目中进行本地数据库存储时,Realm 是一个强大且易用的解决方案。它提供了高性能、跨平台的数据库引擎,能够轻松地处理数据持久化和查询操作。本篇博客将介绍 Realm 的基本使用方法,以及一些需要注意的事项,从而能更好地利用 Realm 来管理本地数据。
1165 0
|
索引
SwiftUI极简教程26:构建一个Banner图片轮播(下)
SwiftUI极简教程26:构建一个Banner图片轮播(下)
904 0
SwiftUI极简教程26:构建一个Banner图片轮播(下)
|
自然语言处理 iOS开发
SwiftUI极简教程03:VStack, HStack, ZStack视图排列的使用(上)
SwiftUI极简教程03:VStack, HStack, ZStack视图排列的使用(上)
1694 0
SwiftUI极简教程03:VStack, HStack, ZStack视图排列的使用(上)