肖旻
摘 要 随着智能手机的广泛使用,各种手机应用软件需求越来越多, 本文实现了基于 IOS手机设备上的移动交通信息线路查询系统,可完成多种方式的线路查询,介绍了有关开发支持环境以及各环节的实现技术手段并提出后续需继续解决的问题。
关键词 iOS Xcode Objective-C
中图分类号:TP311 文献标识码:A
1引言
苹果公司iPhone手机越来越快地占领了现有手机市场的较大份额,它的用户已不计其数。随着在硬件产品上不断升级开发,基于此的软件开发需求也逐渐旺盛起来。基于iOS的开发语言Objective-C和App Store的下载量也逐渐增加,开启了基于iOS相关平台开发应用的更大发展。手机的普及给人们提供了越来越多的便捷服务,结合软件开发可以使得便捷的服务最终得以实现,本文即实现了基于iOS的交通线路查询系统手机客户端的应用。
2应用开发平台与工具
本应用是基于Mac OS X平台下的iPhone手机应用程序开发,因此需要构建一个iPhone应用软件的开发环境。本程序使用Xcode开发平台、Objective-C编程语言进行编写,调试程序使用iPhone模拟器以及iPhone真机。
Xcode是一个Integrated Development Environment(IDE),即集成开发环境,用于开发基于iOS的iPad、iPhone、iPod touch设备应用程序。其功能在于提供Mac OS X或iPhone OS的项目开发构建平台,使文档和代码之间的结合更加紧密,并使代码自动完成,产生与UI控件属性相应的自动生成的功能。开发工具中所包含的iOS SDK以及iOS模拟器可以从苹果官网免费下载安装,但所编写程序只可运行在iOS模拟器上,想要运行在iOS真机设备上,就必须注册苹果开发者账号并购买开发证书才可运行在真机上,进而发布到App Store上供用户下载。iphone ios模拟器无需使用实际的iphone真机就可以测试应用软件。通常不需要直接启动ios模擬器,它在Xcode运行、调试应用程序时会自动启动。
本软件的开发所使用的语言是Objective-C语言,通常写作ObjC、Objective C或Obj-C。Objective-C是扩充C的面向对象的编程语言。它主要在Mac OS X和GNUstep这两个使用OpenStep标准的系统使用。Objective-C可以在含有gcc编译器的系统下进行编写和编译,因为gcc包含Objective-C的编译器。由于它基础语法由C语言编写而成的,运行库非常小,因此它不会使应用程序变得非常臃肿。它与大部分系统相反,大部分OO系统本身使用极大的VM执行时间会取代了整个系统的运作,Objective-C则不同。Objective-C和C++也有所不同,Objective-C不支援运算子多载(它不支持ad-hoc多型),但与Java相同的地方是,Objective-C只有单继承,没有多继承。Categories和protocols不但可以提供很多多重继承的好处,而且缺点较少,例如额外执行时间过重和二进制的不兼容。
系统调试使用iphone ios模拟器,它是iphone SDK中重要的一个工具,无需使用实际的iphone就可以测试应用软件。测试时不需要直接启动ios模拟器,它在Xcode运行(或是调试)应用程序时会自动启动。Xcode会自动将应用程序安装到它上面。iphone ios模拟器能够模仿实际的iphone设备的真实行为,模拟器本身使用了MAC上各种库(如QuickTime)进行渲染以便效果与实际的iphone保持一致。此外,模拟器上测试的应用程序会编译为x86代码,这是模拟器可以理解的字节码。
建立本应用还需要框架库的支持,本应用程序使用系统自带的框架以及库编写界面和主要功能,主要引入的框架有Foundation、QuartzCore、UIKit、MapKit和百度地图API等,还增加了私有封装库编写地图定位、公交线路查询等功能。
3软件设计及实现
本应用软件实现的架构模式为MVC(Model-View-Controller)三层架构,该模式把一个应用的输入、处理、输出流程,按照Model、View、Controller的方式进行分离,这样一个应用将被分成三个层——模型层、视图层、控制层。
使用MVC的目的是将数据模型(M)和用户界面(V)的实现代码分离,从而使同一个程序可以使用不同的表现形式。控制器(C)存在的目的则是确保M和V的同步,一旦M改变,V将进行同步更新。
本软件设计分为两个部分:UI设计与编码设计。
UI即User Interface(用户界面)的简称。UI设计指对软件的人机交互、操作逻辑、界面美观的整体设计,还包括用户与界面之间的交互关系。即使程序功能再强大,UI体验如果不完美,也会影响一款好的应用程序被用户的接受度,可见UI设计的重要性。本应用程序架构设计为主界面推送到不同的功能模块,各模块之间相互独立,因此进入某一功能模块后想要进入另一功能模块就必须先返回到主界面再进入其他模块。本软件主要使用了UITableView、UIWebView、UIScrollView等UI控件。
根据用户需求,调研以及结合实际,本程序编码设计主要包含以下几个功能模块的实现:(1)系统主界面;(2)网页浏览;(3)交通线路查询;(4)天气预报等模块。
以交通线路查询模块为例,它主要包括公交、驾车、步行等出行方式的线路查询。一般的线路查询流程为:用户可以检索公交、驾车、步行等方式查询线路,并且在地图上画上行走路线并有换乘等信息提示,同时还能定位用户的位置,让用户看起来一目了然。本程序使用第三方库由百度提供的百度地图移动版API,它的服务也是免费的。
几种出行方式的动作处理类似,这里以公交线路查询实现为例:首先获取用户在文本框内输入起始与目的地,根据这两地通过相应实现方法向百度服务器发送公交查询的请求:若用户选择起始地为用户位置时,此时应设置(下转第176页)(上接第159页)起始节点为用户坐标,查询时需要发送所在城市名,在此城市名获取通过定位坐标将之反地理编码获取到城市名,当定位成功后发送反地理编码请求,然后在其回调函数中获取城市名。部分实现方法如下:
- (void)onGetAddr Result:(BMKAddrInfo*)result errorCode:(int)error
{ if (error == BMKErrorOk)
{
self.cityString = result.addressComponent.city;
}
}
发送公交查询请求后,会调用公交查询的回调函数如下:
- (void)onGetTransitRouteResult:(BMKPlanResult*)result errorCode:(int)error
通過点击界面不同分行可以将线路方案画在地图上,通过标注类RouteAnnotation继承于BMKPointAnnotation,折线类BMKPolyline即可在地图上画出标记与相应查询线路。
4真机测试
应用程序的最终运行均是在iPhone真机或者iPod touch上实现的,由于模拟器运行程序与真机运行程序实际效果有一定偏差,因此必须保证程序在真机上的运行效果。首先将iPhone连接电脑,然后Xcode运行设备,选择iPhone真机,点击Run运行程序完成测试,本应用的真机实际效果达到了预期。
5结语
本设计中的一个难点在于模拟器与真机的差别,下载到真机上运行结果与模拟器有可能有不一致地方,主要有iOS版本的兼容性问题。在软件功能实现中,线路查询使用WiFi网络比蜂窝数据网络加载地图的速度更快,和网络环境相关性较大;天气预报显示在网络信号不佳的情况下进行刷新时也会出现加载问题,因此,基于网络环境的差异问题还需做进一步探讨。
参考文献
[1] [美]Gene Backlin.iPhone&iPad高级编程[M].岳红,凌冲译.北京:清华大学出版社,2012.
[2] [美]Wei-Meng Lee.iOS 4编程入门经典[M].张龙译.清华大学出版社,2012.
[3] Richaard Dan Pilone.Head First iPhone Development[M].北京:东南大学出版社,2012.
[4] [美]哈灵顿.iOS 4实战[M].北京:人民邮电出版社,2012.
[5] 杨正洪,郑齐心,李建国.Objective-C程序设计[M].清华大学出版社,2011.
[6] [美]克莱尔.Objective-c2.0Mac 和 iOS 开发实践指南[M].李强译.北京:机械工业出版社,2011.
[7] Reffel Kikulu.Ios sdk 4/Xcode 4 应用程式开发范例集for iPhone/iPad[M]博硕文化股份有限公司,2011.