当前位置: 首页 > news >正文

iOS开发之SwiftUI

iOS开发之SwiftUI

iOS开发中SwiftUIObjective-CSwift不同,它采用了声明式语法,相对而言SwiftUI声明式语法简化了界面开发过程,减少了代码量。
由于SwiftUIApple推出的界面开发框架,从iOS13开始引入,Apple使用它的目标是为了打通iOSiPadOSmacOSwatchOStvOS用户界面,保证在不同设备上的一致用户体验(跨平台一致性),所以作为iOS开发不可避免的需要逐步向其过渡。
本文主要通过实际开发去了解SwiftUI的优势和具体实现形式。
iOS开发

实时预览

SwiftUIXcode中提供了实时预览功能,允许开发者在设计阶段就看到界面元素的布局和外观。
这有助于在开发早期发现并修复潜在的问题,从而提高开发效率。

struct ContentView: View {var body: some View {VStack {Spacer()Image(systemName: "chart.bar.xaxis.ascending.badge.clock").imageScale(.large).foregroundColor(.mint).scaleEffect(3.0)Spacer()Text("逝者如斯夫,不舍昼夜!").foregroundColor(.mint).font(.title).fontWeight(.heavy)}.padding().background {SakuraRainView()}}
}#Preview {ContentView()
}

强大的动画和过渡支持

SwiftUI内置了丰富的动画和过渡效果,使得开发者能够轻松地创建流畅且吸引人的用户界面。
这些动画和过渡效果可以帮助提升应用的用户体验。

struct HexagonShape: Shape {var size: CGFloatfunc path(in rect: CGRect) -> Path {var path = Path()let centerX = rect.midXlet centerY = rect.midYlet sideLength = size / 2let angle: CGFloat = CGFloat.pi / 3let radius: CGFloat = sideLength / sin(angle / 2)let points = [CGPoint(x: centerX + radius * cos(0 * angle), y: centerY + radius * sin(0 * angle)),CGPoint(x: centerX + radius * cos(1 * angle), y: centerY + radius * sin(1 * angle)),CGPoint(x: centerX + radius * cos(2 * angle), y: centerY + radius * sin(2 * angle)),CGPoint(x: centerX + radius * cos(3 * angle), y: centerY + radius * sin(3 * angle)),CGPoint(x: centerX + radius * cos(4 * angle), y: centerY + radius * sin(4 * angle)),CGPoint(x: centerX + radius * cos(5 * angle), y: centerY + radius * sin(5 * angle))]path.move(to: points[0])for i in 1..<points.count {path.addLine(to: points[i])}path.closeSubpath()return path}
}struct SakuraView: View {@State var animated = false@State var opacity = Double.random(in: 0...1)@State var offsetX = Double.random(in: -320...320)@State var offsetY = Double.random(in: -600...600)@State var scale = Double.random(in: 0...2)@State var duration = Double.random(in: 1...5)var body: some View {HexagonShape(size: 30).fill([Color.pink, Color.green, Color.blue, Color.yellow][Int.random(in: 0...3)].opacity(opacity)).frame(width: 30, height: 30).offset(x:offsetX, y: offsetY).scaleEffect(scale).rotationEffect(.degrees(Double.random(in: 0...360))).animation(.easeInOut(duration: duration).repeatForever(autoreverses: true), value: animated).onAppear {opacity = Double.random(in: 0...1)offsetX = Double.random(in: -320...320)offsetY = Double.random(in: -600...600)scale = Double.random(in: 0...2)duration = Double.random(in: 1...5)animated.toggle()}}
}struct SakuraRainView: View {let sakuraCount = 200 // 樱花的数量@State var animated = false@State var offsetX = Double.random(in: -320...320)@State var offsetY = Double.random(in: -600...600)@State var duration = Double.random(in: 1...5)var body: some View {ZStack {ForEach(0..<sakuraCount, id: \.self) { index inSakuraView().offset(x:offsetX, y: offsetY).animation(.easeInOut(duration: duration), value: animated).onAppear {offsetX = Double.random(in: -320...320)offsetY = Double.random(in: -600...600)duration = Double.random(in: 1...5)animated.toggle()}}}}
}

让我们来看看效果,以下。

SwiftUI动画

与Swift的集成

SwiftUI是基于Swift语言开发的,因此它与Swift的集成非常紧密。
这意味着开发者可以充分利用Swift的强大功能和特性来构建复杂的用户界面。

状态管理

SwiftUI中,状态管理通过使用特定的属性包装器来管理视图的状态。
主要的属性包装器包括@State@Binding
@State用于管理单个视图的局部状态,而@Binding则用于在不同视图之间共享数据。
当状态值改变时,SwiftUI会自动更新UI以反映最新的状态,无需手动操作视图更新。这种自动更新机制极大地简化了状态管理的复杂性,提高了开发效率。
另外,为了确保数据的一致性和可预测性,SwiftUI推荐使用不可变数据结构来管理状态。
通过使用这些属性包装器和不可变数据结构,开发者可以轻松实现视图状态的管理和更新。
一般iOS开发采用第三方库来进行状态管理,比如ReSwift、SwiftUIX等。

相关文章:

iOS开发之SwiftUI

iOS开发之SwiftUI 在iOS开发中SwiftUI与Objective-C和Swift不同&#xff0c;它采用了声明式语法&#xff0c;相对而言SwiftUI声明式语法简化了界面开发过程&#xff0c;减少了代码量。 由于SwiftUI是Apple推出的界面开发框架&#xff0c;从iOS13开始引入&#xff0c;Apple使用…...

2024-简单点-pandas

pandas pandas to numpy 尽量不用.values提取数据 numexpr 和 bottleneck加速 布尔操作 describe 自定义describe .pipe df.apply 行或者列级别函数级别应用...

面试笔记——Redis(双写一致、持久化)

双写一致 双写一致性&#xff1a; 当修改了数据库中的数据&#xff0c;也要更新缓存的数据&#xff0c;使缓存和数据库中的数据保持一致。 相关问题&#xff1a;使用Redis作为缓存&#xff0c;mysql的数据如何与Redis进行同步&#xff1f;——双写一致性问题 回答时&#xff0…...

【漏洞复现】科立讯通信指挥调度平台editemedia.php sql注入漏洞

漏洞描述 在20240318之前的福建科立讯通信指挥调度平台中发现了一个漏洞。该漏洞被归类为关键级别,影响文件/api/client/editemedia.php的未知部分。通过操纵参数number/enterprise_uuid可导致SQL注入。攻击可能会远程发起。 免责声明 技术文章仅供参考,任何个人和组织使…...

css的active事件在手机端不生效的解决方法

需求&#xff1a;需求就是实现点击图中的 “抽奖” 按钮&#xff0c;实现一个按钮Q弹的放大缩小动画 上面是实现的效果&#xff0c;pc端&#xff0c;点击触发 :active 问题&#xff1a;但是这种方式在模拟器上可以&#xff0c;真机H5一调试就没生效了&#xff0c;下面是简单…...

00. 认识 Java 语言与安装教程

认识 Java Java 在 20 多年发展过程中&#xff0c;与时俱进&#xff0c;为了适应时代的需要&#xff0c;经历过两次重大的版本升级&#xff0c;一个是 Java 5&#xff0c;它提供了泛型等重要的功能。另一个是提供了 Lambda 表达式等重要的功能的 Java 8。 一些重要的 Java 的…...

数据结构-栈-004

1链栈 1.1栈结点结构体定义 /*定义一个数据结构*/ typedef struct student {char name[32];char sex;int age; }DATA_TYPE;/*定义一个栈结点*/ typedef struct stack_node {DATA_TYPE data;//数据域struct stack_node *pnext;//指针域 }STACK_NODE;1.2栈顶结点结构体定义 /*…...

(第76天)XTTS 升级:11GR2 到 19C

参考文档: 11G - Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Doc ID 1389592.1)V4 使用跨平台增量备份减少可传输表空间的停机时间 (Doc ID 2940565.1)前言 XTTS(Cross Platform Transportable Tablespaces,跨平台迁移表空间)是…...

修改网站源码,给电子商城的商品添加图片时商品id为0的原因

修改网站源码&#xff0c;给电子商城的商品添加图片时商品id为0的原因。花了几个小时查找原因。后来&#xff0c;由于PictureControl.class.php是复制CourseControl.class.php而来&#xff0c;于是对比了这两个文件&#xff0c;在CourseControl.class.php找到了不一样的关键几条…...

ffmpeg开发异步AI推理Filter

ffmpeg开发异步AI推理Filter 1.环境搭建、推理服务及客户端SDK2.编译原版ffmpeg3.测试原版ffmpeg的filter功能4.准备异步推理filter5.修改点6.重新编译ffmpeg7.测试异步推理filter本文旨在阐述如何开发一个FFmpeg Filter,该模块利用gRPC异步通信机制调用远程视频处理服务。这一…...

python与excel第七节 拆分工作簿

一个工作簿中多个工作表拆分为多个工作簿 假设一个excle工作簿中有多个工作表&#xff0c;现在需要将每个工作表拆分为单独的工作簿。 例子&#xff1a; import xlwings as xw# 设置生成文件的路径path D:\\TEST\\dataIn# 源文件的路径workbook_name D:\\TEST\\dataIn\\产…...

JS08-DOM节点完整版

DOM节点 查找节点 父节点 <div class="father"><div class="son">儿子</div></div><script>let son = document.querySelector(.son)console.log(son.parentNode);son.parentNode.style.display = none</script>通过…...

【python】python3基础

文章目录 一、安装pycharm 二、输入输出输出 print()文件输出&#xff1a;格式化输出&#xff1a; 输入input注释 三、编码规范四、变量保留字变量 五、数据类型数字类型整数浮点数复数 字符串类型布尔类型序列结构序列属性列表list &#xff0c;有序多维列表列表推导式 元组tu…...

计算机三级网络技术 选择+大题234笔记

上周停去准备计算机三级的考试啦&#xff0c;在考场上看到题目就知道这次稳了&#xff01;只有一周的时间&#xff0c;背熟笔记&#xff0c;也能稳稳考过计算机三级网络技术&#xff01;...

智能合约 之 ERC-721

ERC-721&#xff08;Non-Fungible Token&#xff0c;NFT&#xff09;标准 ERC-721是以太坊区块链上的一种代币标准&#xff0c;它定义了一种非同质化代币&#xff08;Non-Fungible Token&#xff0c;NFT&#xff09;的标准。NFT是一种加密数字资产&#xff0c;每个代币都具有独…...

== 和 equals 的区别是什么?

和 equals() 在 Java 中都是用于比较两个对象&#xff0c;但它们之间存在显著的差异&#xff1a; 比较的内容&#xff1a; &#xff1a;这是 Java 中的基本比较运算符&#xff0c;对于基本数据类型&#xff08;如 int, char, double 等&#xff09;&#xff0c;它比较的是值&a…...

VUE:内置组件<Teleport>妙用

一、<Teleport>简介 <Teleport>能将其插槽内容渲染到 DOM 中的另一个位置。也就是移动这个dom。 我们可以这么使用它: 将class为boxB的盒子移动到class为boxA的容器中。 <Teleport to".boxA"><div class"boxB"></div> &…...

ruoyi-nbcio-plus后端里mapstruct-plus和lombok的使用

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…...

企业如何选择一个开源「好」项目?

开源 三句半​​​​​​​ 需求明确是关键 风险考量要周全 开源虽好不白捡 别忘合规&#xff01; 显然&#xff0c;开源已成为一股不可阻挡的洪流&#xff0c;企业拥抱开源&#xff0c;积极参与开源项目不仅是响应技术潮流的必然选择&#xff0c;更是实现自身技术创新、市场拓…...

c++算法学习笔记 (14) 并查集

1.合并集合 一共有 n 个数&#xff0c;编号是 1∼n&#xff0c;最开始每个数各自在一个集合中。 现在要进行 m 个操作&#xff0c;操作共有两种&#xff1a; M a b&#xff0c;将编号为 a 和 b 的两个数所在的集合合并&#xff0c;如果两个数已经在同一个集合中&#xff0c;…...

SpringBoot WebClient 介绍

目录一、什么是 WebClient&#xff1f;二、 WebClient 能解决什么问题&#xff1f;三、WebClient 和 RestTemplate 的区别四、WebClient 的核心优势1. 非阻塞&#xff08;Non-Blocking&#xff09;2. 支持异步3. 链式 API 更现代五、WebClient 的核心对象六、Mono 和 Flux 是什…...

3分钟掌握中兴光猫配置解密:ZET工具终极快速指南

3分钟掌握中兴光猫配置解密&#xff1a;ZET工具终极快速指南 【免费下载链接】ZET-Optical-Network-Terminal-Decoder 项目地址: https://gitcode.com/gh_mirrors/ze/ZET-Optical-Network-Terminal-Decoder 想要自由掌控家中网络却总被光猫配置限制&#xff1f;中兴光猫…...

AFOAuth2Manager调试技巧:常见问题排查与解决方案

AFOAuth2Manager调试技巧&#xff1a;常见问题排查与解决方案 【免费下载链接】AFOAuth2Manager AFNetworking Extension for OAuth 2 Authentication 项目地址: https://gitcode.com/gh_mirrors/af/AFOAuth2Manager AFOAuth2Manager是AFNetworking的OAuth 2.0认证扩展库…...

从UE/Unity转战Godot:一个老引擎开发者的踩坑与真香实录

从UE/Unity转战Godot&#xff1a;一个老引擎开发者的踩坑与真香实录 第一次双击Godot图标时&#xff0c;我正坐在堆满Unity参考书的办公桌前。作为用过五年Unity、三年Unreal的"引擎老油条"&#xff0c;我带着审视新玩具的心态点开了这个不到100MB的绿色软件——没想…...

5.18~5.24补题

牛客周赛Round 144 A.我是谁&#xff1f;牛客周赛Round 144 B.我是清楚姐姐牛客周赛Round 144 C.其实我是小苯 牛客周赛Round 144 D.骗你的&#xff0c;其实我是小红牛客周赛Round 144 E.好吧&#xff0c;我是BingbongSMU Spring 2026 Round 4 ASMU Spring 2026 Round 4 BSMU S…...

UE5 Niagara实战:用‘定位事件’和‘死亡事件’模块,5分钟做出粒子追踪与消散特效

UE5 Niagara实战&#xff1a;5分钟打造魔法飞弹的粒子追踪与消散特效在游戏开发中&#xff0c;粒子特效是营造沉浸感的关键元素之一。想象一下&#xff1a;一枚魔法飞弹划过夜空&#xff0c;身后拖曳着流光溢彩的尾迹&#xff0c;击中目标时爆裂成绚丽的火花——这种动态效果正…...

集团型企业的知识产权管理:多主体架构与数据隔离

对于拥有多家子公司、分公司或关联企业的集团型公司而言&#xff0c;知识产权管理面临一个特有的挑战&#xff1a;如何在集团层面统一管理所有主体的专利商标资产&#xff0c;同时确保各子公司之间的数据相互独立、不被交叉访问&#xff1f;这一问题在传统Excel管理模式或单公司…...

如何获取VMware Workstation Pro 17免费许可证密钥:完整实践指南

如何获取VMware Workstation Pro 17免费许可证密钥&#xff1a;完整实践指南 【免费下载链接】VMware-Workstation-Pro-17-Licence-Keys Free VMware Workstation Pro 17 full license keys. Weve meticulously organized thousands of keys, catering to all major versions o…...

iOS越狱终极指南:从A11到A17芯片的完整越狱解决方案

iOS越狱终极指南&#xff1a;从A11到A17芯片的完整越狱解决方案 【免费下载链接】Jailbreak iOS 26.4 - 26, 17 - 17.7.5 & iOS 18 - 18.7.3 Jailbreak Tools, Cydia/Sileo/Zebra Tweaks & Jailbreak News Updates || AI Jailbreak Finder &#x1f447; 项目地址: h…...

Windows驱动管理神器:Driver Store Explorer完整使用教程与系统优化指南

Windows驱动管理神器&#xff1a;Driver Store Explorer完整使用教程与系统优化指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否曾经因为Windows系统驱动问题而烦恼&#xff…...