本文为 Eul 样章,如果您喜欢,请移步 AppStore/Eul 查看更多内容。

Eul 是一款 SwiftUI & Combine 教程 App(iOS、macOS),以文章(文字、图片、代码)配合真机示例(Xcode 12+、iOS 14+,macOS 11+)的形式呈现给读者。笔者意在尽可能使用简洁明了的语言阐述 SwiftUI & Combine 相关的知识,使读者能快速掌握并在 iOS 开发中实践。

ProgressView

ProgressView 有两种呈现形式,一种是菊花样式,另一种是进度条样式,二者分别对应 ProgressViewStyle 中的 CircularProgressViewStyleLinearProgressViewStyle

如果我们没有通过绑定的浮点类型的值动态更新 ProgressViewvalue 值,那么它的默认样式就是 CircularProgressViewStyle,即菊花样式。比如:

ProgressView()

或者:

ProgressView("加载中...")

我们还可以通过 .foregroundColor(.blue) 改变文字的颜色,如果我们要修改菊花的颜色,那么可以这样指定:.progressViewStyle(CircularProgressViewStyle(tint: .orange))

而要修改进度条的颜色,则可以通过 .accentColor(.orange) 实现。

进度条样式的实现也比较简单,当然我们也可以自定义 ProgressViewStyle

如下是示例所示的全部代码,供参考:

struct IndicatorsView: View {
@State private var progress = 0.0 {
didSet {
if progress == 100 {
title = "下载完成!"
systemImgName = "checkmark.seal.fill"
} else {
title = "下载ing..."
systemImgName = "square.and.arrow.down"
}
}
}
@State private var title = "下载ing..."
@State private var systemImgName = "square.and.arrow.down"
/// 定时器
private let timer = Timer.publish(every: 0.1, on: .main, in: .common).autoconnect() var body: some View {
List {
// SectionHeaderView 是笔者自定义的视图控件
Section(header: SectionHeaderView(chapter: "ProgressView", section: nil)) {
ProgressView()
.centerHorizontal() // .centerHorizontal() 是笔者自定义的修饰器 ProgressView("加载中...")
.progressViewStyle(CircularProgressViewStyle(tint: .orange))
.centerHorizontal()
.footnote(".progressViewStyle(CircularProgressViewStyle(tint: .orange))") ProgressView(title, value: progress, total: 100)
.foregroundColor(.blue)
.accentColor(.orange)
.footnote(".foregroundColor(.blue)\n.accentColor(.orange)") ProgressView(value: progress, total: 100) {
HStack {
Image(systemName: systemImgName)
Text(title)
}
.foregroundColor(.blue)
} currentValueLabel: {
Text("\(Int(progress))%").foregroundColor(.orange)
}
.footnote("自定义视图")
}
.onReceive(timer) { _ in // 接收定时器更新事件
if progress < 100 {
progress = min(100, progress + Double(arc4random_uniform(5)+1))
}
}
}
.listStyle(InsetGroupedListStyle())
}
}



本文为 Eul 样章,如果您喜欢,请移步 AppStore/Eul 查看更多内容。

SwiftUI 简明教程之指示器的更多相关文章

  1. SwiftUI 简明教程之文本与图片

    本文为 Eul 样章,如果您喜欢,请移步 AppStore/Eul 查看更多内容. Eul 是一款 SwiftUI & Combine 教程类 App(iOS.macOS),以文章(文字.图片 ...

  2. SwiftUI 简明教程之自定义 Modifier

    本文为 Eul 样章,如果您喜欢,请移步 AppStore/Eul 查看更多内容. Eul 是一款 SwiftUI & Combine 教程 App(iOS.macOS),以文章(文字.图片. ...

  3. SwiftUI 简明教程之属性包装器

    本文为 Eul 样章,如果您喜欢,请移步 AppStore/Eul 查看更多内容. Eul 是一款 SwiftUI & Combine 教程 App(iOS.macOS),以文章(文字.图片. ...

  4. 2013 duilib入门简明教程 -- 第一个程序 Hello World(3)

    小伙伴们有点迫不及待了么,来看一看Hello World吧: 新建一个空的win32项目,新建一个main.cpp文件,将以下代码复制进去: #include <windows.h> #i ...

  5. 2013 duilib入门简明教程 -- 部分bug (11)

     一.WindowImplBase的bug     在第8个教程[2013 duilib入门简明教程 -- 完整的自绘标题栏(8)]中,可以发现窗口最大化之后有两个问题,     1.最大化按钮的样式 ...

  6. 2013 duilib入门简明教程 -- 部分bug 2 (14)

        上一个教程中提到了ActiveX的Bug,即如果主窗口直接用变量生成,则关闭窗口时会产生崩溃            如果用new的方式生成,则不会崩溃,所以给出一个临时的快速解决方案,即主窗口 ...

  7. 2013 duilib入门简明教程 -- 自绘控件 (15)

        在[2013 duilib入门简明教程 -- 复杂控件介绍 (13)]中虽然介绍了界面设计器上的所有控件,但是还有一些控件并没有被放到界面设计器上,还有一些常用控件duilib并没有提供(比如 ...

  8. 2013 duilib入门简明教程 -- 事件处理和消息响应 (17)

        界面的显示方面就都讲完啦,下面来介绍下控件的响应.     前面的教程只讲了按钮和Tab的响应,即在Notify函数里处理.其实duilib还提供了另外一种响应的方法,即消息映射DUI_BEG ...

  9. 2013 duilib入门简明教程 -- FAQ (19)

        虽然前面的教程几乎把所有的知识点都罗列了,但是有很多问题经常在群里出现,所以这里再次整理一下.     需要注意的是,在下面的问题中,除了加上XML属性外,主窗口必须继承自WindowImpl ...

随机推荐

  1. SHA算法摘要处理

    byte[] input="sha".getBytes();//待做消息摘要算法的原始信息,可以是任意字符串 MessageDigest sha=MessageDigest.get ...

  2. golang io操作之写篇

    /** * @author livalon * @data 2018/9/4 15:11 */ package main import ( "os" "fmt" ...

  3. 你真的懂 i++ 和 ++i 吗?

    对于 ++i 和 i++,许多人可能都知道,不就是先加1再取值,和先取值再加1嘛.然而,真的是这样吗?请先看以下4道题,能全部答对可以忽略这篇文章. 题目 // 示例1 int i = 1; i = ...

  4. 我的xshell配色方案,绿色/护眼/留存/备份

    [mycolor] text(bold)=e9e9e9 magenta(bold)=ff00ff text=00ff80 white(bold)=fdf6e3 green=80ff00 red(bol ...

  5. [递推]C. 【例题3】数的划分

    C . [ 例 题 3 ] 数 的 划 分 C. [例题3]数的划分 C.[例题3]数的划分 题目描述 将整数 n n n 分成 k k k 份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例 ...

  6. 关于MySQL日志,我与阿里P9都聊了些啥?

    写在前面 周末,我与阿里P9资深技术专家(这里就不说名字了),聊起了MySQL这个话题,为啥会聊这个呢?因为他看到我出版了一部<MySQL技术大全:开发.优化与运维实战>,对书籍的评价也是 ...

  7. TCP的client和server的简单连接

    server: import socket as s import threading as t bind_ip = "0.0.0.0" bind_port = 80#配置服务器监 ...

  8. JAP 1.0.1 以及 《JAP产品技术白皮书》正式发布

    快讯 JAP 1.0.1 正式发布 <JAP产品技术白皮书>正式发布.立即获取:白皮书 JAP 1.0.1 版本内容 新增功能/支持 添加 com.fujieid.jap.core.uti ...

  9. 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之本地仓库-06

    自动化kolla-ansible部署ubuntu20.04+openstack-victoria之本地仓库-06 欢迎加QQ群:1026880196 进行讨论 1. 安装docker registry ...

  10. 解决Deepin-wine-wechat-arch 文件不能正常发送

    1 问题描述 系统Manjaro,使用Deepin-wine微信,目前最新的版本为2.9.5.56-1,发送图片时,会发送不成功,经常在转圈,对于发送其他文件会出现红色感叹号发送失败. 2 解决方法 ...