官方例子库,走向高手之路

时间:2022-04-24 11:54:40

对于绝大多数人而言,除了要自己编程外,还要阅读大量的代码,大量地学习别人的编程方法,其中不仅可以学到思路,还能熟悉语法。与其他语言不同,这方面苹果官方做得相当完美―为我们提供了大量的实例。

上期的文章中,我们已经了解iPhone的界面控件,但估计你还只是知道了有这么个东西,还不知道具体应用起来要如何使用。而其他如重力感应、多点触摸等更加有特色也更有玩头的功能也并没有被涉及到。那么,本期就来看看能从官方的例子库里面能发现什么精彩。

iPhone编程高手宝库:

官方例子库

在苹果官方的网站上,可以找到很多的例子(见图1),从简单的控件使用示范,到复杂的游戏示例,从重力感应的应用,到多点触摸的演示。可以说官方提供的例子程序几乎涉及了iPhone开发的各个基本单元。而看官方例子代码的另外一个好处,就是可以快速地帮助我们理解Objective-C独特的语法。

高手眼中的例子库

在下面的部分,我将列举并简单分析一些相对比较重要的例子。当然,并不是其他的例子就没有用处哦。

UICatalog

这可是一个十分赞的例子,其中有很多在上期描述过的控件。由于这个例子中绝大部分都是使用代码来创建及操作控件,因此对于创建一些特殊的扩展控件,以及一些特殊样式的控件都有很大的引导作用。在很多情况下,其中对于很多控件的使用方法的代码片断(Code Snippets)都是可以直接复制与粘贴来使用的。在代码中可以看到很多类似如下这样引导的代码片断。

#pragma mark

#pragma mark XXXXXXXXXXXX

#pragma mark

这样的部分是一种标志,一般用来在Xcode中查看代码时,用作对某些同类别或者针对某一控件的代码进行归类(见图2)。这里我也要告诉很多准备从事编程的TX,它的存在并不会对代码有什么实际的影响,但方便在日后浏览及维护代码,也使得阅读代码的人会觉得很清晰。毕竟现在很少有绝对的单人开发了,在团队中,保持代码的清晰对于任何一个人都是有好处的。

其中涉及到按钮、输入框、搜索框、图片及视图(View)切换、网页控件、工具条、选择器(Pickers,就是上期描述过的那个很酷的轮子)、提示框、开关、进度条、滑块、页面选择等等几乎常用的各种控件。而且如前面所说,全部控件基本都是由代码创建和维护的,因此当你想在程序中加入某种控件时,完全可以做到像UICatalog内一样,随时创建。而当想制作一些特殊样式的控件时,也可以尝试把这些基本控件进行结合来实现。

Scrolling

这也是一个比较常用的控件的介绍,滚动视图(UIScrollView)。上期介绍控件时曾经提到过这个控件。比如图片浏览,文档展示等很多地方有可能用到此控件。而这个例子就介绍了两种用法,其一是有些像浏览底片感觉的操作方式,多张图并列在一起,通过对左右拖动进行浏览。而第二种则相当于在一张大的照片上,用一个有透明窗口的板子盖住,同时又期望可以了解全图的操作方式。通过上下左右的拖动来看到每一个部分。这样我们就能实现对于滚动视图的基本代码实现法。而当调整代码为开启多点触摸,并设置好缩放参数时,我们还可以对图片进行缩放浏览。这是多点触摸十分常用的操作行为的演示。与此同时,我们也可以对这个例子中的部分视图属性进行调整以用来达到不同的控制效果。比如滚动条是否显示、滚动条的具体属性、方向锁定等等,都可以在代码中进行合理的控制。

SQLite Book List

如果你要在程序中进行一些数据存储,需要一个简单的数据库,那么SQLite是你不二的选择。在iPhone中内置了SQLite的支持,包括通讯录在内的一些系统程序也都使用了SQLite。因此可以很方便地把这个轻量的数据库集成在我们的程序中。在这个例子里,对于数据库的基本操作都涉及到了。包括创建、打开数据库,搜索、添加、删除以及更新每一行数据。这个例子中还涉及到了一些数据库优化的处理,比如复用已经编译过的数据库请求。

SeismicXML

既然数据库操作都有了,那么对于XML的操作也肯定是不可少的了。在iPhone的SDK中存在着一个XML Parser(XML解析器),也就是这个例子中所介绍的东西。不过这个解析器只提供读取功能,没有写,也就是不能用来生成XML。解析的话,我个人觉得多少有些不够方便吧。由于Objective-C/C++也可以使用像C/C++这类的库,所以一些第三方的XML读写库也是可以顺利地被应用到iPhone开发上的。

Touches

多点触摸可以说是iPhone比较核心的功能呀,而这个例子就是针对多点触摸而出现的。整个触摸的操作分为几个步骤,按下、移动、抬起、取消(在某些特殊情况下存在)。处理函数分别如下:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

其中有两个参数,这两个参数都可以获得关于触摸点的信息。但两者是不同的,我简单说明一下。touches中存储的当前发生变化的手指,而[event allTouches]中存储的是全部的手指信息。举例来说,比如目前已经有2个手指在屏幕上了,抬起其中一个手指时,touches中只会有一个手指即将离开屏幕的信息。而此时[event allTouches]中存储的则是全部两个手指的信息,包括一个保持在屏幕上的手指以及另一个即将抬起的手指信息。大家可以在程序中根据自己的需要来选择使用。

WhichWayIsUp

这个例子十分简单,在屏幕发生90度旋转时,判断出其旋转与否及方向,通知屏幕同样进行转旋。比如内置的safari,相册等都应用了这个功能。在程序的某些部分加入这个功能会使得程序看起来很炫哦。

概要性地介绍了几个相对重要的官方例子,大部分都是进行应用类开发所不可缺少的部分。而对于要制作游戏的朋友们,由于主要使用OpenGL ES,也就是OpenGL的精简版,与iPhone平台本身可以说关联不大。甚至完全可以在Windows上进行OpenGL的开发,而后迁移到iPhone上。因此这里我就不多作介绍了。而在下一期,也就是最后一期连载中,离iPhone OS 3.0公布之日也将很近了。我将给大家带来关于iPhone OS 3.0的一些特别介绍。

我们知道,iPhone软件购买的主力一直是北美市场。因此很多生活在北美地区的开发者,被认为会比其他地区的更能把握主力市场需求。因此这期就让我来采访一个生活在北美地区的开发者:武昊

被采访者:武昊

毕业于:东北大学

现就读于:Clarkson University(克拉克森大学,学生竞争力全美排名第9)

攻读专业:Master of Science in Computer Science(计算机科学硕士)

能不能先讲讲是如何进入iPhone开发的?对iPhone开发与其他平台的开发有什么不同的感觉?

武昊:我最初为了省钱,装了个山寨leopard(就是用PC装黑客修改过的苹果操作系统)。主要是为了节约成本,看看水深浅,技术难度什么的。后来读了很多SDK文档,觉得没什么问题,就入手MacBook正式开始了,当时还送了个iPod Touch。我做过最早的Symbian S40开发,后期也曾尝试用C++作Symbian,不过这个配置实在太麻烦了,就没有继续下去。所以,我觉得iPhone最大的好处就是开发方便,工具集成度高,很容易入手。

iPhone上一些软件的热销和北美人民对于某些类型游戏的热衷,是我们不在那个环境中的人无法理解的,你怎样看这种文化差异对iPhone软件的影响呢?

武昊:我个人觉得这种文化差异其实可以提高我们开发者自身的认知。每个人做出来的东西都觉得很好,也用的很舒服。但是当你给其他人去用的时候,你发现还有很多缺陷需要改正。如果你是在一个你熟悉的人文环境,你觉得可以接受,当你面对不同的环境,可能就觉得匪夷所思了。所以,面对iPhone给我们带来的差异,如果我们能够去不断地修正自己的开发理念、设计理念,不仅能够促进水平的提高,而且能够迎合更多人的口味,最终有更好的下载量。

很多网站都报道过不少靠iPhone软件发大财的案例,给人们描绘了十分美丽的“钱景”。但事实情况似乎未必都这么乐观,你又是怎么看待这些的呢?

武昊:总体来说,成功的毕竟是少数。我们看到的都是很多成功的案例,可我们没看到更多失败的案例。AppStore有2万多款产品,这其实也说明了大部分产品都不是我们期待的成功。不过,这确实是一个机遇。我自己做的第一个产品,并不成功,也怀疑过自己是否选择正确,是否知难而退。但是,我觉得不管做什么事情,都是有挫折的,目前我们的挫折就是看似美丽的前景,其实却不尽如人意。是不是每个人都能挺过来,都能坚持下来呢?因此我觉得,只要坚持了,做到最后了,总有你的一份羹。

其实我觉得你的游戏(Melody Match)的创意还是很不错的。期待你的下一部作品。很快就到国内3G的日子了,你对于国内可能会上市的行货iPhone及国内的App Store市场怎么看?

武昊:哈哈,谢谢。所以说,有时候我们觉得好的,可能大部分受众并不一定也觉得好。对于国内的市场,我觉得是很难说的。iPhone软件破解这么容易,而且提供盗版的渠道又这么多,很难说有多少人会买正版。不过无论怎样,毕竟国内的用户群基数很大,哪怕千分之一,万分之一的人购买,也是有赚头的。作为开发者,不妨尝试做一个中国的语言支持,其他的就听天由命了,呵呵。

最后能否给想要进入iPhone开发,想来淘这桶金的朋友一些建议呢?

武昊:我想,只要把iPhone当成一个普通的领域对待就好,就像你当初选择考研还是就业,作网游还是做手机一样。只不过iPhone的曝光率太高,而且诱惑太多,就觉得它很特别了。我个人的感觉是,一方面它提供了很好的集成开发环境,虽然也有人有很多的抱怨;另一方面,它的设计理念,特别是它的硬件,都非常优秀。我很喜欢这个平台,比起BlackBerry或者Nokia,我更喜欢在这个平台作。所以,如果决定进入iPhone,那就努力去做,迎难而上,总有一天,会有你的一桶金。

上一篇:用Word打印小册子的三种方法 下一篇:精明老王的精明打算