从做项目中学习iOS开发(一)——BullsEye

自打学iOS开发以来,也想找出适合自己的学习方法,因为埋头钻研语法的知识、开发的细节组成部分,实在是有些枯燥。这些东西本身是有用的,但是如果是初学者来自学的话,很容易陷入只见树木不见森林的困境,甚至因为没找到成就感和激励,过早地退出了自学的循环,扔下一句“我学不会”就离开了,也是挺可惜的(自己差点就这样:))。

自从碰到了Ray Wenderlich出的iOS Apprentice教程(一共4个App的教程),跟着做完了第一个BullsEye之后,觉得这种开始学习就能看见成果、由浅入深但不流于表面的学习方式,简直就是我期待已久的教程。做完了第一个教程的App,分享一下收获和体会。

学会程序员的思考方式

教程的开头,就是开始逐渐教你如何学会程序员的思考方式,比如作者给出了一个BullsEye的最终效果图,首先需要你去思考如何实现它。重点是这里并非是要你想到如何去用代码实现,因为你都还没开始学,而是要你用自然语言来描述一下需要做哪些步骤。知道要做什么之后,怎么做的问题基本就难不倒你了,这也是程序员的核心能力——分解任务和复杂的问题。
成为一个真正的程序开发者,还是成为一个代码工人,这也是你要去思考的,思考,正是区分二者的关键。

理解编程的基本概念

这也是这个教程的独特和难能可贵之处,因为作者并没有假设你会一些基本的概念,而把这些东西跳过去,相反,他把一些最最基础的概念讲解得非常形象化且易于理解:比如什么是变量?对象?发送消息?字符串?... ...等等这些编程的基本概念,在一般的书和教程中,要么是没有,或者就是非常枯燥、学术的解释。其实许许多多的想学编程人,往往会容易卡在这些问题上,而这些甚至被一般的写书的作者和大牛所忽视,因为太基础了。

成果激励——把知识点穿插于具体的App开发中

先学会C语言,再学Objective-C,再学iOS的Cocoa Touch框架,前面的都掌握之后,你就可以开始编写漂亮的App了。这个“理想”的路径看起来很美,但是在现实中,至少就我个人的经验来说,这基本不可行。
因为你想学iOS开发的初心或许是因为App Store中的那些美妙的应用、使用iPhone的优雅体验,总之都是一些很美好、有情感的东西打动了你,然后你想学iOS开发了,想开发出自己的App,抱着这个憧憬和目标,你打开了买来的书和教程,准备学C语言和Objective-C了。但是,当你硬着头皮往前学了一段时间,你还是不知道怎么开发一个App,甚至,教程上教你的仍然是命令行程序,连UI都没有,这时,你看了一下学习语言花去的时间,再估计一下自己开发出第一个App的时间,顿时觉得遥遥无期,这种挫折感足以令许多本来可以学会iOS开发的人望而却步。
那么,除了这条路径之外,还有没有别的更好的方法呢,这个教程就给出了一个很好的范例,你学到的知识是马上就可以应用到这个App的开发中的,而且关于这个知识点的记忆,是鲜活的,因为你清楚地知道它可以用来解决哪些问题,而不只是书本上的一个干巴巴的概念。

学习的过程和笔记

一、开发这个App的步骤分解

BullsEye的成品效果图

我写的步骤:
1.进入游戏之后,首先告诉用户需要干什么,怎么玩这个游戏,需要一个Label来告诉用户,比如“让滑动条接近20”;
2.目标数字怎么得来的呢?这需要在每回合随机生成一个1~100的随机数;
3.我需要有一个数值为1~100的滑动条,来让用户滑动;
4.用户在滑动条上拖动完成后,在滑动条下方提供一个按钮,用来核对游戏结果,并用一个alertView显示出来;
5.游戏结果怎么计算,其中的算法是:检查目标数字和用户拖动的数字之间的绝对值,用100分满分减去这个绝对值,得出0~100的得分;
6.有两个Label,分别用来显示累计得分和回合数;
7.提供一个重新再来的按钮,这样用户可以清空总得分和回合数,可以和别人一起比拼;
8.游戏要横屏操作;
9.游戏开始时,播放背景音乐,如果可以实现,最好在每次的得分宣布时,播放音效,比如“好棒啊,第一把就一击命中了~”;
10.有一个显示制作消息或帮助提示的按钮,点击会切换到另一个modal页面,里面显示textview或者一个webview,用来显示相关信息。

二、对象、消息和方法的概念

这三个对于iOS开发和面向对象编程,都是重要的概念。作者用一幅图,关于组织聚会、买冰淇淋是例子,形象地解释了这些概念。


对象、消息、方法和买冰淇淋的关系

三、变量的概念

形象地解释了变量的作用——存储某个数据,而且根据“形状”的不同,有五角星、有矩形,还告诉你声明的不同变量存储不同的数据类型。


变量的概念

四、算法

听到“算法”两个字,恐怕许多人会很头大,不过在BullsEye中,比较玩家的数值和目标数值的差距,来得出玩家的得分,作者用这个例子来引入算法的概念,帮大家祛魅、解除对算法的恐惧感。


别害怕,算法而已

五、代理的使用

这也是这个教程简洁但不简单的一个体现,很快就接触到iOS的一个核心的概念——代理,代理在iOS开发中应用广泛,这里用了一个例子:点击游戏的按钮、计算出得分之后,得分的显示框UIAlertView还在,游戏已经自动开始下一局了,这显然不是好的用户体验,所以借此引入了代理的概念。用户点击UIAlertView的Button时,发送消息给它的代理对象,让代理对象来实现代理方法,开始下一局。

六、美化界面

美化之前的界面

这样的用户交互界面,还称不上是一个真正的App,如果这样提交到App Store,毫无疑问会被拒的。所以,开始来美化这款App:

  1. 加载教程给出的图片资源文件,当然如果自己会PS的也可以自己画一些图标之类的;
  2. 美化按钮,给按钮加上背景图片;
  3. 美化滑动条,这个暂时苹果没有提供直接在storyboard上改,而是需要手写一段代码;
  4. 把游戏说明的textView改为webView,所以在这第一个教程我们就简单地接触到了加载网页,虽然是一个本地的HTML5页面;
美化之后的界面

七、适配多种屏幕

作为一款真正的App,显然不能只是在自己这款机型上用的,现在仍然可以运行iOS8的机型有:iPhone 4s、5、5c、5s、6、6 Plus,这就涵盖了3.5寸、4寸、4.7寸、5.5寸这几种屏幕尺寸,如果每个尺寸都要单独提供图片资源的话,相信开发者或者设计师会疯掉的。所以这时引入了自动布局(Auto Layout)技术,如果你是使用storyboard来设计UI界面的话,自动布局将更加便捷,可以直观地设置几个约束,你的App就可以跑在多个iPhone机型上了,还是挺酷的:)

八、真机调试运行

经过了一段学习的旅程,你完成了这个教程,这时,怎么能按捺住自己的冲动,而不把App装到自己iPhone上呢?在之前,这通常需要你有付费的开发者账号($99,或者¥688),但是随着Xcode7的即将发布,至少真机调试是不需要付费的(我没等Xcode7,已经在万能的淘宝解决了这个问题)

继续前进

做完了这个App,可谓麻雀虽小,五脏俱全,iOS开发的核心概念都有涉及,而且更重要的是,学习的过程就是做一个真实的App的过程,每一步都有进展、得到正向的激励反馈。已经迫不及待开始之后的几个教程了:)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,504评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,022评论 4 62
  • Swift版本点击这里欢迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh阅读 25,289评论 7 249
  • 一位少女初恋了。晚上,她伏在案上给男友写情诗,然后轻轻读着:“早晨,我不吃饭,想你;中午,我不吃饭,想你;夜晚,我...
    梓毓爸阅读 110评论 0 3
  • 家附近有两个服装店,是我学生时代常去的。 一家已经搬迁了,最后一次买,老板对我说“装修一下”。现在是个不伦不类的酒...
    老晁阅读 319评论 0 2