作为独立开发者,有些时候需要大量读音的时候,就可以使用一些语音合成技术,虽然讯飞、谷歌的语音合成技术似乎更好一点,但是需要联网从云端获取,这有时候会影响软件的效率和成本。好在iOS自带语音合成技术,支持的语言包括各个地区口音的英语、中文(普通话)、日语、法语等。 在SwiftUI
前言 ios中可以直接使用苹果官方提供的map——MapKit。在SwiftUI中如何使用MapKit网上有也有不少文章,但是大部分不详细,大部分只是简单的展示出地图。所以本文来详细的讲解一下如何使用MapKit的各项功能。 官方地址:https://developer.apple.com/documentation/mapkit 1、Map
一、背景 我们在布局中,经常会遇到视图元素排列时空间不足或者空间过大的情况,在这种场景下面,不同的布局方式有不同的方法: 绝对布局frame:纯靠计算过程控制,获取父视图的大小,根据需求,计算自己需要的大小,并设置到frame上去 iOS autolayout:这里更先进一点,将视图中的约束预设
前言 前几天不久,一直在家吃灰的iPad Pro,系统更新到了iOS 15.2,Swift Playgrounds提示 升级到4.0之后可以直接在iPad上使用SwiftUI构建 iPhone Or iPad应用。第一时间就想体验一下这个功能,首先多人协作肯定是不行的,因为暂时没有git协作的说法。那我从个人开发者的角度来使用一
实战需求 SwiftUI 完整项目之基于Core Data多功能沉浸式浏览器浏览器项目 本文价值与收获 看完本文后,您将能够作出下面的界面 功能简介 在浏览器上观看媒体有很多复杂的设置和混乱。默认浏览器safari具有大量的杂乱无章,为消费媒体提供了非沉浸式体验。本项目解决了这个问题
这篇文章是我自己在实现Radio按钮功能的时候,因为自己也是初学者,所以在GitHub上着了相关的案例,并进行了一定的改修,这里做一下学习记录。 import SwiftUI struct MyTmpView: View { let items: [String] = ["item 1", "item 2", "item 3", "item 4", "item 5"] //确
全部文章请移步: SwiftUI APP 集成 Google 移动广告 Admob (一):https://www.xugj520.cn/archives/swiftui-admob-1.html SwiftUI APP 集成 Google 移动广告 Admob (二):https://www.xugj520.cn/archives/swiftui-admob-2.html 简介: 随着越来越多的应用程序使用 SwiftUI 构建,我想提
1. Swift 相关 1.1. 删除多余的SceneDelegate类(或者将最低版本设置为10.0做SceneDelegate的适配) 1.2. swift路由 1.3. swift版简易SDWebImage(下载+缓存) 1.4. swift简易登录(https+加解密) 1.5. 建立一个自己的库,分别使用pod, carthage,spm三种方式. 2. SwiftUI相关 2.1 加入App
文章目录 SizeCategoryPreviewDeviceColorScheme-LightAndDarkContext MenuDebug SizeCategory struct ContentView : View { var body: some View { VStack { Text("Dynamic Type sizes") .font(.system(si
什么是@ViewBuilder? 首先,它是一个注解,先看下官方文档的说明: /// You typically use ``ViewBuilder`` as a parameter attribute for child /// view-producing closure parameters, allowing those closures to provide /// multiple child views. For example, the following
### 什么是ViewModifier? 按照惯例,我们先看下官方文档说明 /// A modifier that you apply to a view or another view modifier, producing a /// different version of the original value. 翻译为 什么是ViewModifier? 按照惯例,我们先看下官方文档说明 /// A modifier that
本节课开始制作会员订阅页面,用户可以在本页面选择一个订阅周期,以在指定的周期里,自由使用《互动教程合集》里的所有课程。 首先创建一个数据类型,作为订阅选项的数据模型和数据源。点击此处的新建文件命令,创建一个实体类。 在打开的文件模板窗口中,选择此处的文件模板。
本节课开始制作班级页面,当用户点击首页上的某个班级时,将进入班级页面。在班级页面,将以章节对互动教程进行细分。 点击此处的显示或隐藏导航器图标,隐藏左侧的项目导航面板。 接着开始编写代码,完成班级页面的制作。 添加一个属性,用来读取环境变量里的值。 添加另
您已经完成了项目的前期配置操作,现在开始编写代码,实现程序界面的制作。您将在本节课开始首页的制作,首先在子视图的组里,创建一个子视图文件。 选择此处的新建文件命令,打开文件模板选择窗口。 在打开的文件模板窗口中,选择此处的SwiftUI视图模板。 点击此处的下一步
记录学习学习SwiftUI过程中遇到的一些好的学习资料 官方文档 SwiftUI TutorialsSwiftUI DocumentationCombine Documentation 视频 Introducing SwiftUI: Building Your First AppSwiftUI EssentialsData Flow Through SwiftUIBuilding Custom Views with SwiftUIIntegrat
Future在苹果官方文档的解释为:最终发布一个数据并立即结束。 这个解释过于简单了,其实Future的作用是:我将在未来的某一时刻,发布一个数据,并伴随着成功或失败的状态。 这个功能你可能听起来比较耳熟,对,他就是逃逸闭包(@escaping closure)的功能。 查看Future的源代码,我们可以看到 fi
我们可以 EditButton() 编辑模式情况下 设置selection参数, 记录选择的值,同时还需要设置列表的id参数 List(dataItems,id:\.self, selection:$selectModel) { item in }.navigationTitle("人员管理").toolbar { EditButton() 完整代码如下 stru
这是一款用来在线销售美味冰激凌的商务应用,从本节课开始,我们将一起制作该应用的两个主要的界面。通过该实例的制作,您将学习页面之间数据的传递。 由于需要从一个页面跳转到另一个页面,所以首先添加一个导航视图,作为需要进行导航的视图的容器。 从效果图可以看出,页面所
本节课延续上一节课的内容,您将完成由曲线图表、面积图表、柱状图表组合而成的复合图表。 首先添加一个ZStack视图,作为图表子视图的容器。 绘制一个矩形,作为图表的背景,并填充指定的颜色。 通过忽略安全区域的限制,将矩形撑满整个屏幕。 除了背景之外的图表元素都
@Environment 和 @EnvironmentObject 都可以在环境中存储、读取数据,但是@Environment 需要根据预定义的键,获取相应的值。 并且@Environment可以很方便的获取系统定义的固定属性。要使用@Environment,首先定义一个遵循EnvironmentKey协议的结构体。 实现协议中的defaul
SwiftUI 2.0带来的@AppStorage属性包装器,可以很方便的将属性的值同步到UserDefaults中。 定义一个属性,它拥有一个默认值,并且使用了@AppStorage属性包装器,这样对该属性的存储和读取操作,都将映射到键名为nickname的UserDefaults中。 添加一个文本视图,用来显示属性的值
功能需求 SwiftUI自带的Slider永远看不见当前值是什么! So,为Slider添加当前值显示功能需要付出多少努力呢? 答案是:基本只要一丢丢! 是不是感觉不错呢? 在本篇博文中您将学到: 怎样实时获取Slider把手的位置? 如何知道用户何时开始和结束拖动Slider? 如何在Slider把手上显示值
本节课演示List列表视图的使用,列表视图类似于UITableView,用于在垂直方向上显示一系列的内容。 在按下command键的同时,点击此处的视图,打开快捷操作菜单。 选择此处的List选项,将视图嵌入到List视图里。 这样就创建了一个列表,该列表在默认状态下拥有五行内容。继续编
本节课演示如何配合NavigationView导航视图,往一个List列表里插入新的记录。 首先添加一个数组属性,作为列表的数据源。 接着添加一个导航视图,导航视图的功能类似于UINavigationController,主要用于多个视图之间的跳转。我们将在第六章详细讲解它的使用。 然后创建一
效果如下 import SwiftUI struct ContentView: View { @State private var addressItems: [Province] = [] @State private var areas: [String] = [] @State private var selectProvinceIndex = 0 @State private var selectCityIndex = 0 @State private