swiftui基础组件Image加载图片,以及记载gif动图示例

news/2024/9/23 10:04:08/

想要在swiftui>swiftui中展示图片,可以使用Image这个组件,这个组件可以加载本地图片和网络图片,也可以调整图片大小等设置。先大概看一下Image的方法有哪些可以用。

常用的Image属性

1.调整图像尺寸: 使用 resizable() 方法使图像可调整大小。您可以通过 frame() 方法设置具体的尺寸。

2.缩放图像: 使用 scaledToFit() 和 scaledToFill() 方法调整图像的缩放模式。scaledToFit() 会保持图像的原始纵横比并在给定的空间内最大化图像大小。scaledToFill() 会保持纵横比并填充给定的空间。

3.控制图像的缩放和裁剪方式:aspectRatio 有两种模式:.fit 和 .fill
.fit:保持图像的原始宽高比,确保整个图像在给定的空间内可见,即使这意味着在某些边缘留有空白。这是默认模式。
.fill:保持图像的原始宽高比,但确保填充整个给定空间,这可能会导致图像的某些部分被裁剪。

4.裁剪图像: 使用 clipped() 方法裁剪图像。这会删除在视图边界之外的所有图像部分。

5.设置图像透明度: 使用 opacity() 方法设置图像的透明度,0.0 为完全透明,1.0 为完全不透明。

6.设置图像的渲染模式: 使用 renderingMode() 方法设置图像的渲染模式。.template 模式将图像视为模板,从而可以使用 foregroundColor() 设置颜色。.original 模式将保留图像的原始颜色。

7.添加圆角: 使用 cornerRadius() 方法为图像添加圆角。

8.创建圆形图像: 使用 clipShape 为图像添加圆形裁剪。

9.添加叠加层: 使用 overlay() 方法在图像上添加叠加层。

10.添加边框: 使用 border() 方法为图像添加边框。

11.添加阴影: 使用 shadow() 方法为图像添加阴影。

12.添加背景: 使用 background() 方法为图像添加背景。

加载本地图片

将本地图片加载到项目资源中,在Assets.xcassets文件中,可以导入本地图片素材,Assets不仅可以导入图片,还可以设置颜色,这块我们以后会用到。点击Assets,在底部点击“+”按钮,选择Image Set(或者鼠标右键):

或者也可以直接点击 Import 导入图片资源: 

然后就可以在项目中使用 .文件名 导入图片了,如果图片名称是数字开头的,会自动加上一个下划线前缀,如果是英文开头,直接使用点就可以自动提示加载的图片资源:

加载之后的效果:

Image(.miniapp)

该代码初始化了一张图片,我们在模拟器上可以看到显示了图片,这是创建图片视图的基本语法。

我们看到图片会很大,只能看到一部分。这时候如果我们想要看到完整的图片,我们需要对图片进行缩放:

Image(.course).resizable()

实现效果:

我们可以看到模拟器中预留出了顶栏和底栏两块区域,这是因为由于有“安全区”的存在。安全区是排除顶部栏(即状态栏)和底部栏的视图区域,它定义了可以安全地放置UI组件的视图区域。有了安全区,可以预防在编程时有些UI控件不知道去哪里的风险。如果你想忽略安全区,把视图撑开整个屏幕,可以通过设置.edgesIgnoringSafeArea修饰符来忽略安全区域。

从模拟器中我们可以看到,示例图片已经有点变形,这是因为.resizable()只是简单的拉伸缩放,而没有保持原有的比例,如果我们想等比例缩放,那么我们需要使用.scaledToFit()修饰,这样就可以保持原有图像的宽高比。

//等比例缩放
Image("示例图片").resizable().scaledToFit()

另外,使用.aspectRatio(contentMode: .fill)也可以达到同样的效果,都试试吧。如果我们想调整图片的大小,方便我们和别的UI控件形成美感,那么我们也可以调整下图片的显示尺寸:

.frame(width: 250)

在App开发中,如果我们想要用一张图片作为头像,但我们的图片有可能不是圆形的。这时候,我们可以将多余的部分裁剪掉,留下中间的部分:.clipShape(Circle())

如果图片色调太深了,与App整体色调相冲突。我们可以尝试降低下图片的透明度,使它和App更和谐:.opacity(0.5)

有时候,图片只是作为背景存在,在图片上还会有文字或者图标的情况,示例:壁纸类软件。这时候,我们需要在图片视图上再增加添加一个视图,“覆盖”在上面,我们可以用.overlay()修饰符:

Image("示例图片").resizable().aspectRatio(contentMode: .fit).frame(width: 350).clipShape(Circle()).opacity(0.8).overlay(Text("编辑").fontWeight(.bold).font(.system(size: 24)).foregroundColor(Color.white))

或者直接设置Text的背景为图片:

        Text("Hacking With Swift").foregroundStyle(.red).fontWeight(.bold).font(.system(size: 48)).padding(50).background(Image(.miniapp).resizable())

效果图:

再引入一个知识点,Image除了可以展示本地导入的图片、网络图片,还可以显示系统图标。Apple官方提供了超过3000个新符号供开发者使用,开发者几乎无需自己收集常用图标。官方地址:

https://developer.apple.com/sf-symbols/

下载安装后,我们可以快速了解图标符号的名称,从而快速使用它。使用方式很简单,只需要在Image里添加systemName就可以了:

Image(systemName: "moon.fill").font(.system(size: 80))

 

加载网络图片

加载网络图片有多种方式,我们一个一个看,哪种方便我们就使用哪种

1.加载 AsyncImage 通过URL加载的图像文件

AsyncImage(url: URL(string: "https://hadoappusage.oss-cn-shanghai.aliyuncs.com/static/mini_image/miniapp.jpg"))

因为SwiftUI不知道下载的图像有多大,因此默认情况下AsyncImage在加载时具有灵活的宽度和高度。因此如果你不指定固定的宽度和高度,在图像加载之前会占用大量空间,然后在图像加载之后会调整到正确的大小:

AsyncImage(url: URL(string: "https://hadoappusage.oss-cn-shanghai.aliyuncs.com/static/mini_image/miniapp.jpg")) { image inimage.resizable()} placeholder: {Color.green}.frame(width: 300, height: 200).clipShape(RoundedRectangle(cornerRadius: 25))

 

2.AsyncImagePhase动态加载图片

显示image加载过程,会有菊花的中间视图过度

        AsyncImage(url: URL(string: "https://hadoappusage.oss-cn-shanghai.aliyuncs.com/static/mini_image/miniapp.jpg")) { phase inswitch phase {case .failure: Image(systemName: "photo").font(.largeTitle)case let .success(image): image.resizable()default: ProgressView()}}.frame(width: 200, height: 200).clipShape(Circle())

3.使用KFImage库

KFImage仓库地址:https://github.com/onevcat/Kingfisher

KFImage(URL(string: "https://hadoappusage.oss-cn-shanghai.aliyuncs.com/static/mini_image/10003.jpg")).resizable().frame(height: 200)

 

加载GIF动图

加载显示gif动图可以使用开源的gif库:https://github.com/igorcferreira/GIFImage

这个依赖库可以加载网络gif图,也可以加载本地gif图,使用起来还是相当给力的。但是需要注意:这个依赖库最低支持ios17.0版本以上的系统,所以根据自己项目来哦。安装依赖库:

1.加载网络gif图片

需要先引入 import GIFImage 组件库,创建URL变量

// 引入组件库
import GIFImage// 定义gif动图url
let url = URL(string: "https://hadoappusage.oss-cn-shanghai.aliyuncs.com/static/pad_image/beautiful.gif")!// 使用组件
GIFImage(source: .remoteURL(url))// 或者
GIFImage(url: "https://hadoappusage.oss-cn-shanghai.aliyuncs.com/static/pad_image/beautiful.gif")

使用示例:

2.加载本地Gif图

现将本地文件添加到xcode项目中,点击菜单栏的File > Add Files to 项目:

 

或者直接拖动文件到左侧的文件栏中:

添加到项目中之后,就可以使用Bundle引入到代码中了,比如引入的是txt文件,那么就:

// forResource是文件名,ofType是文件类型
let filePath = Bundle.main.path(forResource: "example", ofType: "txt")

如果是gif文件,就导入:

let filePath = Bundle.main.path(forResource: "beautiful", ofType: "gif")

引入之后,使用GIFImage显示动图:

let filePath = Bundle.main.path(forResource: "beautiful", ofType: "gif")// 显示
GIFImage(source: .local(filePath: filePath!))

显示效果:


http://www.ppmy.cn/news/1463695.html

相关文章

Linux 系统的目录和文件管理

一、目录结 目录 一、目录结构和每个目录的作用 二、基本命令 1.分页查看more tail 命令 wc命令grep | 管道符 打包和解包 以及vim的用法 vim 文本编辑器单行替换 一、目录结构和每个目录的作用 二、基本命令 1.分页查看more tail 命令 wc命令 grep | 管道符 …

shell中编写备份数据库脚本(使用mysqldump工具)

mysqldump备份 目录 mysqldump备份 分库备份 分表备份 利用自带工具mysqldump 实现数据库分库分表备份。 要想知道需要备份哪些数据库,就得先列出来 mysql -uroot -pOpenlab123! -N -e show databases | egrep -on_schema|mysql|performance_schema|sys" …

Linux漏洞SSL/TLS协议信息泄露漏洞(CVE-2016-2183) - 非常危险(7.5分) 解决办法!升级openssl

漏洞情况 详细描述 TLS是安全传输层协议,用于在两个通信应用程序之间提供保密性和数据完整性。 TLS, SSH, IPSec协商及其他产品中使用的IDEA、DES及Triple DES密码或者3DES及 Triple 3DES存在大约四十亿块的生日界,这可使远程攻击者通过Sweet32攻击&…

【数据结构】排序详解(希尔排序,快速排序,堆排序,插入排序,选择排序,冒泡排序)

目录 0. 前情提醒: 1. 插入排序 1.1 基本思想: 1.2 直接插入排序 实现步骤: 动图演示: 特性总结: 代码实现: 1.3 希尔排序(缩小增量排序) 基本思想: 步骤演示&…

如果jupyter notebook不能实现网页自动跳转,参考下面的链接

一招搞定Jupyter-notebook命令行打开之后不能自动跳转浏览器_一招搞定jupter notebook命令行打开之后-CSDN博客

MongodDB实现用户名密码远程登录的配置步骤

1. 引入 根据参考1,在CentOS7上搭建了MongodDB6.0。 搭建后,参考2中的步骤,进行配置,就能使用mongosh命令来连接mongo,也可以实现远程登录。 但是,此时不需要密码,就能连接上MongoDB&#xff0…

OpenCV学习(2.1) 初识图像

1.图像对象 图像是由一个个像素组成的,像素越多,体现到图像就是更加清晰,有更多的细节。举个例子,通常来说的分辨率,1080P,720P,480P就是指像素的数量,数量越多就越清晰。 2.打印图…

pip安装报错解决之后,手动安装太麻烦,怎么办

在使用pip install package_name安装公共库的时候,经常会报错: Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。C:\Users\Administrator>pip install hatch WARNING: Ignoring invalid distribution -ip (d:\soft\python\py…