「试想你是一名美术,齐全不理解程序。而你眼前只有一位盲人程序员,你想让他帮你实现这个程序,你会怎么通知你的程序员你想要的成果?」
本文!
本文是 SwiftUI 开发教程中的一篇,咱们将一起探索上述问题的答案。若你有趣味学习 iOS 利用程序开发,又或者是想理解 iOS 程序是如何运行的,欢送关注这一系列文章。我会频繁更新对于 iOS 程序开发的各种知识点和技巧。
什么是点按弹窗?
在更新 iOS 13 或者 iPadOS 13 后,你会发现长按许多软件图标都会呈现如下弹窗,比方设置内的快捷选项容许你疾速更改电池设置等等。点按弹窗的体验并没有止步于此,应用过新零碎一段时间后,你会发现这个点按弹窗渗透到了零碎利用的方方面面。事实上,苹果在往年 WWDC 19 开发者大会中,举荐开发者将利用内弹窗安置在应用程序的方方面面,以保障 iOS 用户体验的一致性。
iOS 13 中的点按弹窗
在开始写点按弹窗之前,咱们须要简略理解什么是 SwiftUI。简略来说,任何你在手机上看到的程序界面都叫 UI,也就是交互界面。在手机利用中,软件开发者会应用不同的技术来实现界面的显示,风行的界面语言比方 Flutter,就是闲鱼利用的交互界面语言。而对于苹果的设施,比方 Apple Watch,Mac,iPhone 或是 iPad,苹果在 2019 年推出的官网 UI 编程语言则是 SwiftUI。SwiftUI 集众家之长,具备诸多优良个性,能够预感它将会呈现在诸多应用程序中。若你有趣味,我会在其它文章中详解 SwiftUI,本文只着重讲其中弹窗的写法与逻辑。
你会怎么形容一个程序?
本文我将用如下图中的一个例子来展现如何设置点按弹窗。下图中程序的性能很简略:长按这句名言后,会呈现点按弹窗,你能够点击复制按钮将这句话复制到零碎剪贴板中。
试想你是一名美术,齐全不理解程序。而你眼前只有一位盲人程序员,你想让他帮你实现这个程序,你会怎么通知你的程序员你想要的成果?
兴许你会这样和他说:563513413,不论你是大牛还是小白都欢送入驻
我这个程序上有一段名人名言,中英文版,下面一行是「天助自助者」,上面是「God helps those who help themselves」我心愿它能被点按选中,选中的时候肯定留神中英文两句话要一起被选中,而且上下左右请留出边距;对了,选中后要弹出一个选项,右边是复制,左边是一个复制的图标;啊,对了对了,英语字体最好是圆体字,而且两段文字都要加粗,就是小标题加粗的那种感觉。
那么为什么我要说这些呢?因为 SwiftUI 的设计思路正是描述性编程语言,你将下面这段话略微整顿一下,就是 SiwftUI 的写法。比方上面这段文字就是我整顿好的 SwiftUI 代码:
SwiftUI 的实现办法
开个玩笑,咱们还缺一步,把这段文字翻译成 SwiftUI 的写法就行了。
透过 SwiftUI 语法理解如何设置点按弹窗
这个性能的全副实现代码如下,我会在下文中逐渐解说每一段代码的用处。
SwiftUI
SwiftUI 由两类代码组成,别离是 View 和 Modifier。如下图所示,这两类代码都能够在 Xcode 中间接拖出来用,你要做的只是玩拼图把它们拼在一起拼出你想要的性能。其中 View 示意一个视图,比方咱们在手机上看到的一个滑条,一张图片,一个列表等种种,都叫做视图;而 Modifier 则是润饰器,它的作用是为视图减少性能,比方圆角,动画,暗影,边际,背景等等。下图就是它们在 Xcode 中的预设。
Xcode Library
写 SwiftUI 得过程,实际上就是将一个个最根本的 View 像滚雪球一样越包越大的过程,你把一个个根底的视图和修改器用一个更大的视图包在一起,用修改器批改更大的视图,就能实现简单的性能。当初咱们来察看上述代码的构造,你会发现整段代码由一个名叫 VStack 的视图和泛滥 Modifier 组成。
the Big Picture
那么 VStack 是什么呢?它的外面为什么会包着两个 Text 呢?其实 VStack 和 Text 实质上都被归为 View 这一类,VStack 的作用是将两段文字包在一起以便于被整体选中。而前面的全副代码都是这个 VStack 视图的润饰器,为其增加色彩,边距,以及点按弹窗性能。其中,上图的例子里的 View 又蕴含了两个更小的 Text View,每个 Text View 又被 .font 的字体修改器批改。
说了那么多你可能曾经晕了,那么咱们来比照看看第一段,仔细观察上面这张图。发现了吗?纵向排列的 View 在 SwiftUI 里叫做 VStack,它用一个花括号 {包住外面的内容};而文字的 View 在 SwiftUI 里叫做 Text。中文里圆括号中的各种要求,正是 SwiftUI 里的各种修改器,语法结构是「. 修改器的名字」。比方下图中咱们想批改为小标题的字体,就写 .font(.headline)。
comparison
是时候攻克更多的内容了,咱们来看看上面这段代码,我先不说你看看。对了,正是这样,这段代码中蕴含三个针对 VStack 的修改器,别离是注释设置为红色 .foregroundColor(Color.white),周围加边距 .padding(),和显示点按菜单.contextMenu()。
3 modifiers
终于聊到了点按菜单的实现形式了,点按菜单是什么呢?它的本质就是一个 View,和其它任何 View 并无二致,因而咱们须要在 contextMenu 里放一个 View 即可。而点按菜单,顾名思义,就是一个按钮,那么咱们设置一个 Button View。在按钮中,咱们须要设置两个点:按钮的动作,也就是 action,外面的两行代码会将名言文字复制到剪贴板;另一个点是上面的 HStack,示意一个程度排列的 View。其右边是一个文字,左边是一个图标。这里对于 Button 的解释若你不相熟编程可能会有点晕,没关系,我会在其它文章具体解说。
dark view ? yes
在上图中,你会发现背景变成蓝色的了,为什么?因为我写文章的时候曾经是早晨了,手机主动切换到了夜间模式,咱们的应用程序也实现了主动切换。这是如何做到的呢?我会在其它文章中具体解说。
写在文后
若你耐着性子读完本文,你可能会发现我用来展现的代码多了个齐全没用的 HStack,你可能会发现我没讲那个复制图标是哪来的,你可能会好奇这么多代码如何整顿成更易读的小块。如果你是新手,你可能会好奇 contextMenu 如何用在 UIKit 上;如果你对编程零根底,你可能会发现用 SwiftUI 写程序界面和简略性能其实没那么难,无非就是对大白话的翻译。
若你想认真的学习 SwiftUI 和苹果或安卓利用程序开发,欢送在文末写下你想学习的内容,我会参考写文。若你因为文中的长代码而感到胆怯,感觉程序员都是蠢才,脑子超好用能将这些代码一次性全写进去,不是这样的。比方下面代码中的例子,一开始你只有一个简略的思路,我要一句名言,能点按复制就行。于是乎你放下了一个文字的 View,写进去了感觉不难看,扔各种润饰器下来加色彩改字体加图标种种,雪球越滚越大你的程序也越加难看和领有越多功能。SwiftUI 是一个全新的 UI 语言,别怕,在这里咱们都是老手。
「试想你是一名美术,齐全不理解程序。而你眼前只有一位盲人程序员,你想让他帮你实现这个程序,你会怎么通知你的程序员你想要的成果?」
你会说,嗨,这么简略的事,用 SwiftUI 美术我本人就能写。