让不懂编程的人爱上iPhone开发2020 Swift版-02

作者: eseedo 分类: iOS入门 发布时间: 2020-01-29 22:05

继续我们的学习。

苹果小八卦-SwiftUI vs UIKit

对于完全零基础的小白来说,看下面的这一段文字可能会有一些费解。你可以选择先跳过回头再看,也可以选择先过一遍,有一点基础的印象。

iOS开发这几年的变化颇大,首先是前几年引入了全新的Swift编程语言,而从2019年的iOS13开始,又引入了SwiftUI。看到UI(User Interface,用户界面)这个后缀就大概知道,它可以帮助开发者更轻松的创建应用的用户界面。SwiftUI属于所谓的工具包,换作专业的说法,就是”打包好的代码块,可以让开发者用来当做构建自己应用的砖块“。

苹果为什么要辛辛苦苦弄出SwiftUI这么个东西出来呢?可能有很多原因,但有一言为证。

”天下大势,分久必合合久必分。“

随着应用平台类型的不断扩展和增加,苹果开发从最早的Mac平台开发扩展到多个平台:macOS,iOS,iPadOS,watchOS,tvOS,当然还有传说中针对自动驾驶电动汽车的carOS,以及针对增强现实设备的rOS。

平台的细分化自然有它的好处,但是对于开发者来说,如果希望开发跨平台(苹果内部)的应用,这种细分化是让人十分恼火的。姑且不说跨iOS/Android/Web/PC这种更大尺度的平台,单是苹果内部这些子平台,都已经让人够受的了。

苹果的工程师团队(特别是负责软件的高级副总裁Craig老兄)应该意识到了这个问题。

说到Craig,这里稍微八卦几句他的背景。

这个在台上看起来风度翩翩、热情洋溢的技术负责人早年曾在乔布斯创建的Next公司工作过,在1997年随着Next被苹果收购,也跟着乔布斯一起来到了苹果,也算是从龙的功臣了。中间有一段时间Craig曾离开苹果,在一家名为Ariba的企业软件公司担任CTO,最终于2009年重返苹果。

Craig和Scott Forstall曾共同掌管着苹果的软件开发工作,不过Craig职业生涯的大部分时间都负责企业软件,和负责消费者系统和软件的Scott相比,在苹果内部属于相对边缘的位置。命运的转机来自Scott Forstall的自大。

福斯特在苹果内部号称”小乔布斯“,他处处模仿乔布斯的行事风格,虽然天赋异禀,但却桀骜不驯。乔布斯去世后,人们曾普遍预测首席设计师Jony Ive和Scott Forstall将成为接替乔布斯的最佳人选。但最终是此前默默无闻甘愿充当乔布斯绿叶的Tim Cook接过了苹果的权杖。

自大傲慢的福斯特在乔布斯时代曾因为出色的能力而受到宠爱,但是江山易改本性难移。苹果大权落到Tim Cook之后,Forstall却依然我行我素。在iOS6中的地图饱受外界批评时,他沿袭了乔布斯时代的做法,拒绝向公众道歉。最终主动向公众道歉的是苹果的新老大Tim Cook,这一做法让来自美国南部的谦谦君子Tim Cook终于痛下决心,不久后就将其逐出苹果。

在2012年iOS之父Scott Forstall因为内部权力斗争被驱逐出苹果后,为人和善但颇具才干的Craig很快接替了Scott的职责,开始全面负责苹果的移动端和Mac软件团队。

但个人观点,或许是因为Craig过于激情的风格,在他执掌苹果的软件团队期间,苹果的开发工具和操作系统不再像以前那么稳。从2013年到2019年,苹果的硬件产品设计几乎没有什么大的创新。

Apple iPhone 11 (A2223) 128GB京东¥5999.00去购买

但本该默默在后台提供稳定支持的开发工具和操作系统,甚至包括编程语言工具却频频出新出奇,颇有点矫枉过正之嫌。

当然,作为一个键盘侠,我并非苹果公司的一员,思维见识也跟Craig有相当的差距。或许这些年苹果在软件层面的频繁更新和变动有更深层面的规划在里面,那就不得而知了。

吐槽完毕,让我们接着说SwiftUI的老祖宗UIKit。从iOS 2.0开始苹果就引入了UIKit,也正是从那时起苹果允许第三方开发者在App Store上面发布自己的应用。UIKit基于更古老的工具AppKit,它的设计是用来开发macOS桌面应用的,最早期的版本可以追溯到2001年。

那么AppKit来自哪里呢?猜猜看。

你猜对了,AppKit也来自NeXTSTEP,由NeXT开发的操作系统。而NeXT正是乔布斯1984年被苹果驱逐后所创建的另外一家电脑公司。从商业的角度,NeXT是一个失败的案例。但是NeXT留下了无数珍贵的遗产,包括AppKit和日后的macOS的根基,包括乔布斯本人,以及Scott Forstall和Craig,Phil Shiller等众多杰出的高管。

随着1997年NeXT被苹果并购,苹果重新迎回了自己的灵魂,大量的人才,以及受用至今的精神财富。

UIKit推出的时代,iPhone也刚刚推出不久,所谓的移动互联网也还处于发展的早期阶段。当时不带物理键盘的全触摸屏还是一个全新的概念,开发移动应用还是新鲜事。虽然那时就已经有人号称自己拥有5年以上的iOS开发经验,但明眼人都知道那是纯粹的扯淡~

当时对于移动应用开发的认识还停留在,”移动应用和桌面应用类似,只不过运行在性能更低屏幕更小的电脑上。“

早期的iOS应用采用Objective-C开发,而这门语言历史更是可以追溯到20世纪八十年代。

而到了2020年的今天,几乎人人手里都有一部智能手机。大家对于移动应用开发的认识已经有了质的区别,那就是,“移动应用是一种独立的应用种类,所有的用户都知道APP可能是怎样的。”

如今iOS应用开发(包括未来)的主流编程语言是Swift,它是一门全新的语言,在持续进化中,苹果几乎每年都会提供一个大的版本更新。

所以你看,iOS应用开发在这十年内已经发生了巨大的变化:

Objective-C+ UIKit ——- Swift + UIKit ——-Swift + SwiftUI———-?

需要注意的是,SwiftUI作为新推出的开发工具,还不能马上完全替代UIKit。

无论是iOS开发小白新手,还是有一定经验的开发者,都需要掌握SwiftUI和UIKit这两种工具。

除非,你选择用React Native或Flutter~

八卦结束,让我们进入真正的正题吧。

“拖拖看”小游戏

在我们学习iPhone开发的第一站,将创建一个叫“拖拖看”的小游戏。当游戏最终完成后的效果如下:

游戏的规则很简单,你需要拖动滑动条上的红色靶心,让它所在的位置尽可能接近我们设定的目标数字(每次随机生成)。比如在上图中的目标数字是84。因为你没法直接看到滑动条上靶心所在位置的数字,所以就得去猜。

当你觉得差不多的时候,可以按下Hit me!按钮,然后就会出现一个对话框告诉你猜的结果如何。

你猜的数字越接近目标数字,你的得分就越高。当你按下OK按钮后就会关闭对话框,然后开始新一轮的游戏。你可以一直玩下去,直到按下”重新来过“按钮(左下角的那个),它会把累积得分重置为0。

帮你整理思路的待完成事务清单

练习:现在你已经大概知道游戏大概的最终视觉效果了,也了解了游戏的基本规则。如果感兴趣的话,可以尝试写下来为了制作这款游戏要做哪些事情。当然,很可能此时你脑中一片空白,但Don’t panic。不要恐慌,从零开始没有你想象的那么难。

我还是给你点提示吧:“为了制作这款游戏,我们需要把Hit Me!按钮放到屏幕中,然后当玩家触碰它的时候弹出对话框。。。”诸如此类的事情,你可以按这个思路去想,无论想到什么,想写下来。哪怕你现在一行代码都不会写也不要紧。在做任何事情之前,我们首先需要了解的是需要做什么,具体如何去实现反而不是那么重要。

一旦你明白自己该做哪些事情,你就可以真正着手开始去思考如何去实现,不管是请求高手指点,在网上求助,或是自己去查询各种文档来学习。再次强调一点,知道该做什么是最最重要的。很多初学者(包括一些老鸟)在开始写代码之前很少思考,也不会在纸上写写画画,他们甚至不知道自己最终要实现的是个什么样的东西,也难怪很容易就会在中间受阻了。

每当我开始做一个产品的时候,无论是应用还是游戏,首先都会把这个产品要实现的功能详细列出来。这就是我的开发用事务清单(to-do list)。有了这样的清单,可以把一个产品的设计和功能分解为很多小的模块,从而在具体实现的时候降低了复杂度。

很多时候我们灵光乍现有了非常NB的一个创意,但一旦坐在电脑前开始写代码的时候,就会觉得这个事太难了,简直无法实现。比如制作一款像MineCraft一样NB的独立游戏,想想就令人望而生畏,要做的事情太多了,究竟该从哪里着手开始呢?还是那句话,列一个清单出来,把你要做的事情分解为具体而小的步骤。如果某个步骤让你觉得非常复杂,就继续分解下去,直到你认为马上可以操作为止。然后就从那里去开始执行吧。

毫无疑问,这个练习对于新手来说有点困难,或许依然是无从下手吧。

但随着你对软件开发的理解逐渐深入,你会发现如何将一个完整的产品设计分解为具体可执行的模块或组件。

说了这么多,或许你还是找不着北吧。这里我就勉为其难整理一下开发这款游戏要做的事务清单吧:

  1. 在屏幕中放一个按钮,在按钮上放一个标签”打我啊笨蛋!”,或者”Hit Me!“

2.当玩家触碰Hit Me这个按钮的时候,需要让应用弹出一个对话框,告诉玩家他猜的准不准。当然在此之前我们需要计算玩家的得分 ,并把得分放到对话框的弹出信息中。

3.在屏幕上放置一些文本标签,比如”Score:”,“Round:”。有些文本标签的内容会随着游戏的进展发生变化,比如玩家的得分,每轮游戏结束后都会增加。

4.在屏幕上放一个滑动条,把它的数值范围设定在1到100之间。

5.在每轮游戏开始的时候生成一个随机数,并把它显示在屏幕中。这个随机数就是目标数值。6.当玩家触碰Hit Me按钮后读取滑动条上的数值。

7.比较滑动条上的数值和所生成的随机数,并基于它们之间的差异值来计算玩家的得分。最后把这个分数放到对话框的弹出信息中

8.在屏幕上放置一个“重新来过”的按钮。使用它来重置玩家得分和游戏轮数。

9.把应用设置为横向显示

10.美好界面😄

当然,我可能漏掉了某些事情,不过有了这样的一个清单,起码你知道该干吗了。哪怕是如此简单的一款游戏,都需要我们去做这么多的事情。当然,具体如何来实现先不要着急,无论这款游戏是PC版,Mac版,iOS版,还是Android版,我们都需要做以上的这些事情,只是具体的实现方法不同而已。

所以,在具体开发产品之前最重要的是明确自己要做哪些事情。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注