swiftui专题

SwiftUI 6.0(Xcode 16)全新 @Entry 和 @Previewable 宏让开发妙趣横生

概览 如火如荼的 WWDC 2024 已进入第五天,苹果开发平台中众多海量新功能都争先恐后的喷薄欲出。 在这里就让我们从中挑两个轻松有趣的新功能展示给小伙伴们吧:它们分别是 全新的 @Entry 和 @Previewable 宏。 在本篇博文中,您将学到如下内容: 概览1. 用 @Entry 宏简化环境变量定义2. @Previewable 让 Xcode 预览调试安闲自得

SwiftUI 6.0(iOS 18)新容器视图修改器漫谈

概览 本届 WWDC 2024 观影正如火如荼的进行中,一片鸟语花香、枝繁叶茂的苹果树上不时结出几颗令人垂涎欲滴的美味苹果让秃头码农们欲罢不能。 如您所愿,在界面布局“利器” SwiftUI 这根蔓藤也长出不少喜人的果实,其中在 iOS 18.0 中新添加的容器视图修改器大家一定不能错过。 在本篇博文中,您将学到如下内容: 概览1. 探囊取物:获取容器子视图2. 聚沙成塔:重新

SwiftUI中UIViewRepresentable的使用(UIKit与SwiftUI的桥梁)

UIViewRepresentable是一个协议,用于创建一个SwiftUI视图,该视图包装了一个UIKit视图。通过实现UIViewRepresentable协议,我们可以在SwiftUI中使用自定义的UIKit视图,并与SwiftUI进行交互。 实现UIViewRepresentable 创建一个遵循UIViewRepresentable协议的自定义结构体,比如我们用TextField举例

SwiftUI中自定义Shape与AnimateableData的使用

上一篇文章主要介绍了一下在SwiftUI中如何自定义Shape,本篇文章主要介绍Shape中的 一个关键的属性AnimatableData,它用于定义可以被动画化的数据。通过实现 Animatable 协议,可以让自定义视图或图形响应动画变化。 AnimatableData 是 Animatable 协议的一部分,它指定了哪些数据是可以进行动画处理的,而Shape协议继承了Animatable协议

SwiftUI七使用UI控件

代码下载 在应用中,用户可以创建一个简介来描述他们自已的个人情况。为了让用户可以编辑自己的简介,需要添加一个编辑模式并设计一个偏好设置界面。这里使用多种通用控件来展示用户的各种数据,并在用户保存他们所做的数据修改时更新地标数据模型。 按照步骤在下面的项目工程中一步步进行实践,项目文件。 展示用户简介 应用在本地存储了一些配置和用户偏好设置。在用户编辑这些数据前,会被展示在一个没有编辑按钮的

SwiftUI中结合使用Timer和onReceive

SwiftUI提供了一种现代化的方式来构建用户界面,其中包括对时间驱动的事件的响应。在许多应用中,可能需要根据时间间隔执行某些操作,例如更新界面或触发事件。SwiftUI通过结合使用Timer和 onReceive 来实现这一功能,使得处理时间相关的任务变得简单而直观。 Timer 的基本使用 在 Swift 中,Timer 是一个用于创建重复或非重复计时器的类,它可以在特定的时间间隔触发。在

SwiftUI四绘制路径和形状

代码下载 创建徽章视图 创建徽章前需要使用SwiftUI的矢量绘画API创建一个徽章视图 1、新建HexagonParameters.swift文件。HexagonParameters结构体定义了绘制徽章六边形形状的控制点参数。仅仅使用这些数据指定绘制徽章形状时,线段和曲线的控制点位置: import SwiftUIstruct HexagonParameters {struct Segm

SwiftUI 利用 Swizz 黑魔法为系统创建的默认对象插入新协议方法(五)

功能需求 在 SwiftUI 的开发中,我们往往需要借助底层 UIKit 的“上帝之手”来进一步实现额外的定制功能。比如,在可拖放(Dragable)SwiftUI 的实现中,会缺失拖放取消的回调方法让我们这些秃头码农们“欲哭无泪” 如上图所示,我们在拖放取消时将界面中的一切改变都恢复如初,目前单靠 SwiftUI 这是不可能完成的任务!那么我们是如何实现的呢? 在本篇博文中,您

SwiftUI 利用 Swizz 黑魔法为系统创建的默认对象插入新协议方法(三)

功能需求 在 SwiftUI 的开发中,我们往往需要借助底层 UIKit 的“上帝之手”来进一步实现额外的定制功能。比如,在可拖放(Dragable)SwiftUI 的实现中,会缺失拖放取消的回调方法让我们这些秃头码农们“欲哭无泪” 如上图所示,我们在拖放取消时将界面中的一切改变都恢复如初,目前单靠 SwiftUI 这是不可能完成的任务!那么我们是如何实现的呢? 在本篇博文中,您

SwiftUI-布局-ForEach

注意点: 添加 id需要索引的使用count 直接对数据循环 private struct NamedFont: Identifiable {let name: Stringlet font: Fontvar id: String { name }}private let namedF

SwiftUI-JSON序列化、反序列化

Swift5 自带解析 extension Encodable{func toJson() -> String {return String(data: try! JSONEncoder().encode(self), encoding: .utf8) ?? ""}}extension String{func toModel<T:Decodable>() -> T? {do{return tr

SwiftUI 5.0(iOS 17)进一步定制 TipKit 外观让撸码如虎添翼

概览 在之前 SwiftUI 5.0(iOS 17)TipKit 让用户更懂你的 App 这篇博文里,我们已经初步介绍过了 TipKit 的基本知识。 现在,让我们来看看如何进一步利用 SwiftUI 对 TipKit 提供的细粒度外观定制技巧,让 Tip 更加“明眸皓齿”。 在本篇博文中,您将学到如下内容: 概览1. TipKit 温故而知新2. Tip 外观细粒度定制3. 完

SwiftUI中的Slider的基本使用

在SwiftUI中,可以使用Slider视图创建一个滑动条,允许用户从范围中选择一个值。通过系统提供的Slider,用起来也很方便。 Slider 先看一个最简单的初始化方法: @State private var sliderValue: Float = 100var body: some View {VStack(spacing: 30) {Text("\(sliderValue)

SwiftUI中的Stepper(系统Stepper以及自定义Stepper)

本篇文章主要介绍一下Stepper,这个组件在UIKit中也已经有较长的历史了,下面看看在SwiftUI中如何使用,有哪些更加便捷的方法呢? Stepper减号(-)和加号(+)按钮,可以点击后以指定的数值进行加减。 基础初始化方法 Stepper提供了很多初始化方法,先从最简单的一个入手: @State private var stepperValue: Int = 18var b

SwiftUI中的手势(MagnificationGesture、 RotationGesture)

通过前两篇文章的探索,手势的基本使用规则已经较深的了解,本篇文章主要看看放缩手势MagnificationGesture和旋转手势RotationGesture。 MagnificationGesture 放缩手势 放缩手势在App中用的也比较广泛,下面先看一个示例效果: 上面示例中将图片进行了放大,主要使用了MagnificationGesture手势,并对该手势添加了.updating和

SwiftUI中的手势(TapGesture、LongPressGesture、GestureState的使用)

手势操作在App中可谓是用途非常广泛了,常规的手势修饰符有TapGesture点击手势、LongPressGesture长按手势、DragGesture拖拽手势,MagnificationGesture放缩手势和 RoationGesture旋转手势。 和常规的修饰符方法类似,只要将手势修饰符添加到视图中,系统就会自动识别用户的操作,并根据对应的手势交互执行相对应的指令。 本篇文章主要探索一下T

SwiftUI 解决英雄(Hero)动画导致“图片墙”点击切换时卡顿唐突的问题

问题现象 从 SwiftUI 2.0 开始,苹果通过 matchedGeometryEffect 修改器方法新增了对英雄动画(Hero Animation)的支持,这立即使得 SwiftUI 动画表现力提升了一个新级别。“英雄”虽好,不过倘若使用不当也会造成“诡异”的效果: 如上图所示,我们利用 Hero 动画呈现的图片墙感觉极其卡顿而且在动画元素衔接上非常不协调。这是“肿”么回事?又

Xcode 15.0 新 #Preview 预览让 SwiftUI 界面调试更加悠然自得

概览 从 Xcode 15 开始,苹果推出了新的 #Preview 宏预览机制,它无论从语法还是灵活性上都远远超过之前的预览方式。#Preview 不但可以实时预览 SwiftUI 视图,而且对 UIKit 的界面预览也是信手拈来。 想学习新 #Preview 预览的一些超实用调试小妙招吗?那就“如意如意”随小伙伴们的心意吧! 在本篇博文中,您将学到如下内容: 概览1. Xcod

swiftui macOS实现加载本地html文件

import SwiftUIimport WebKitstruct ContentView: View {var body: some View {VStack {Text("测试")HTMLView(htmlFileName: "localfile") // 假设你的本地 HTML 文件名为 index.html.frame(minWidth: 100, minHeight: 100) /

SwiftUI Swift 显示隐藏系统顶部状态栏

Show me the code //// TestHideSystemTopBar.swift// pandabill//// Created by 朱洪苇 on 2024/4/1.//import SwiftUIstruct TestHideSystemTopBar: View {@State private var isStatusBarHidden = falsevar

iOS开发之SwiftUI

iOS开发之SwiftUI 在iOS开发中SwiftUI与Objective-C和Swift不同,它采用了声明式语法,相对而言SwiftUI声明式语法简化了界面开发过程,减少了代码量。 由于SwiftUI是Apple推出的界面开发框架,从iOS13开始引入,Apple使用它的目标是为了打通iOS、iPadOS、macOS、watchOS和tvOS用户界面,保证在不同设备上的一致用户体验(跨平台一

macOS SwiftUI 选择器组件规范之 04 滑杆Slider

滑杆 滑块显示为水平或垂直轨道,或圆形刻度盘,使用户可以在值的范围内进行细粒度的选择。滑块包含一个称为thumb的控件,用户可以单击并拖动该控件在最小值和最大值(例如,媒体播放期间的音量或位置)之间移动。滑块还可以包含刻度线,从而使用户更容易查明范围内的特定值。 在没有刻度线的线性滑块中,拇指是圆形的,并且最小值和拇指之间的轨迹部分充满了颜色。在带有刻度线的线性滑块中,拇指是有方向性的(指

SwiftUI动画之几何匹配

SwiftUI动画之几何匹配 记录一下 日常开发中经常使用到的滑块功能 如何同工几何匹配快速制作点击动画 import SwiftUIstruct MatchedGeometryEffestExamle: View {let categories = ["Home", "Popular", "Saved"]@State var selecedTitle = "Home"/// 使用@Names

详解 WWDC 20 SwiftUI 的重大改变及核心优势

6月23日凌晨 1 点,苹果 WWDC20 开发者大会在线上以主题演讲的方式,在 Apple Park 进行直播。 23-26日,苹果公开了 100 多个面向开发者的视频,内容涵盖Swift / SwiftUI 、App Clips、Widgets、Privacy & Security 等等方面。 对于开发者和程序员来说,我们有哪些新发现和新思考? 淘系技术客户端团队,将给大家带来一系列关于新

SwiftUI的 特性 - ViewModify

SwiftUI的 特性 - ViewModify 记录一下SwiftUI的 特性 - ViewModify的使用方式 可以通过viewModify来管理视图的样式,结合extension来完成封装达到解偶效果 import SwiftUI/// 我们可以通过viewModify来管理视图的样式,来达到解偶效果struct DefaultButtonViewModifier: ViewMo

SwiftUI的 暗黑模式适配方案

SwiftUI的暗黑模式适配方案 import SwiftUIstruct DarkModelBootCamp: View {/// 获取环境变量的颜色值@Environment(\.colorScheme) var colorSchemevar body: some View {NavigationView {ScrollView{Text("this is primary").foregr