毕业论文-基于LBS的iOS客户端应用之生活助手的设计与实现_第1页
毕业论文-基于LBS的iOS客户端应用之生活助手的设计与实现_第2页
毕业论文-基于LBS的iOS客户端应用之生活助手的设计与实现_第3页
毕业论文-基于LBS的iOS客户端应用之生活助手的设计与实现_第4页
毕业论文-基于LBS的iOS客户端应用之生活助手的设计与实现_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE2 SHANDONGUNIVERSITYOFTECHNOLOGY毕业设计说明书题目:基于LBS的iOS客户端应用之生活助手的设计与实现学院:计算机科学与技术学院专业:计算机科学与技术学生姓名:秦利超指导教师:王云摘要PAGEI摘要随着近年来智能的爆炸性增长,LBS已经开始广泛被使用并在改变我们的生活:下班后的朋友聚会,可以用大众点评网搜索附近500米内最好吃的餐馆;用Google地图寻找最快捷的路线和抵达方式;发一条新微博,顺手添上自己所在的位置;高德导航可以轻松取代车载GPS,指引下一个聚会地。本论文主要围绕实现iOS设备的LBS进行相关详细的分析介绍。最终实现附近、搜索、签到、优惠券、今日团购、排行榜、记录、城市信息、更多九大功能模块。关键词:智能、LBS、签到、分享。ABSTRACTPAGEIIABSTRACTInrecentyears,withtherapidgrowthofsmartphones,theLBShasbeenwidelyusedandischangingourlives:thegatheringoffriendsafterwork,youcanusethebestfoodrestaurantwithin500metersnearthepubliccommentnetworksearch;useGoogleMapstofindthemostefficientrouteandarrival;Postanewmicrobloggingandaddtheirlocationinit;highDenavigationcaneasilyreplacethecarGPS,undertheguidanceofaparty.ThisthesisismainlyaroundtheLBSiOSdevicestocarryoutadetailedanalysisofintroduction.Andultimatelytoachievenear,search,sign,coupons,buy,list,record,urban,moretheseninefunctionalmodules.Keywords:Smartphone、LBS、signin、share.目录PAGEIV目录摘要 IABSTRACT II目录 III第一章 引言 11.1课题的目的和意义 1移动互联网时代的新宠:LBS应用 1主要设计内容 2第二章 iOS、语言、环境以及所用技术介绍 32.1iOS简介 32.2Objective-C语言 42.3Xcode开发环境 42.4SQLite数据库 52.5JSON解析 5第三章 需求分析 73.1设计背景 7总体设计 7第四章 详细设计与实现 9首页展示设计 9附近模块设计 10搜索模块设计 13签到模块设计 14优惠券模块设计 16今日团购模块设计 18排行榜模块设计 19记录模块设计 26城市信息模块设计 28更多模块设计 29第五章测试 30测试项目 30附近模块测试 30附近模块测试 30签到模块测试 30优惠券模块测试 30今日团购模块测试 30排行榜模块测试 30记录模块测试 30城市信息模块测试 31更多模块测试 31第六章参考文献 32第七章致谢 33第一章引言PAGE33引言近几年,人们用移动设备接入互联网的时间显著上升,与此相伴,“LBS”(LocationBasedService),即基于用户当时位置的服务将会呈蒸蒸日上之势。1.1课题的目的和意义在维基百科上,对LBS的简短定义是“通过移动设备在移动网络中对于地理位置信息的定位所提供的一种信息与娱乐服务”。一个关于LBS应用的著名段子是,老婆要求老公买下iPhone4后,每两小时都得通过签到网站签到一次这样一来,她就能知道他的全部行踪,可以预防出轨。随着近年来智能的爆炸性增长,LBS已经开始广泛被使用并在改变我们的生活:下班后的朋友聚会,可以用大众点评网搜索附近500米内最好吃的餐馆;用Google地图寻找最快捷的路线和抵达方式;在街旁网上签到分享自己和朋友大快朵颐的照片;发一条新微博,顺手添上自己所在的位置;高德导航可以轻松取代车载GPS,指引下一个聚会地。在这个背景下,基于LBS的服务类应用如雨后春笋般得以大量涌现。移动互联网时代的新宠:LBS应用据中国互联网络信息中心(CNNIC)最新的统计报告(2011年7月),截至2011年6月底,中国网民规模为3.18亿。网民在总体网民中的比例为65.5%,移动互联网时代已经全面到来。那移动互联网究竟给我们带来了什么?环顾一下四周,我们会不难发现,无论是在公交车还是在地铁,总有不少人低着头沉默不语,他们紧盯着自己手中的或平板,手中也没闲着,在不停的比划,凑近一看,他们要么在玩游戏,要么在上qq,要么在微博,要么在一些社交网站。我们会发现,一旦有一点空闲的时间,我们就会拿出我们的来玩。蹲厕所时,隔壁会传来小鸟撞击石头而发出的叫声;在电梯中,总会有朋友拿出或ipad登陆自己的某个客户端。当我们通过登录自己的LBS客户端,在某些地方进行签到的时候,你会拿到你想要的徽章,通过这个徽章你会享受打折优惠;你也会看到有些疯狂的朋友为了一个徽章不择手段的采用虚假签到;这都是现实的生活,这就是移动互联网给人们生活带来的变革,通过智能终端上网,你不在被拘束在电脑前,只要身边有网络信号即可。不过这其中似乎减少了人与人之间的交流,更多的是增加了人机之间的交互,把一些的交流也带入了虚拟的空间中。如今的签到已经成为了现在移动互联网玩家的一个嗜好,通过签到你可以分享自己当前的状态,同时还能获得朋友当前的情况,在个人分享的时代中,签到成为了一个助推剂,让大家尽情的享受在彼此熟知的虚拟环境中。(1)附近模块:将附近的签约商户分门别类(如美食、酒店等)的进行展示。(2)搜索模块:该模块主要实现的功能是可以通过输入商户名、地址搜索特定商户和热门商区的展示。(3)签到模块:该模块主要实现的功能是签到商户、对商户进行评价、上传照片、关注。(4)优惠券模块:该模块的主要功能是显示正在进行的优惠商户信息。(5)今日团购模块:该模块主要实现的功能是展示团购信息、购买。(6)排行榜模块:该模块主要实现的功能是根据人气、评分等展示热门商户和最佳商户的排行。(7)记录模块:该模块收集展示收藏商户和浏览记录。(8)城市信息模块:该模块主要实现的功能是展示所选城市的生活信息如:医院、银行、公安机关等等。(9)更多模块:该模块主要实现的功能是显示自己的账户信息。第二章iOS、语言、环境以及所用技术介绍iOS、语言、环境以及所用技术介绍iOS平台使用了构建MacOSX时积累的知识,iOS平台的许多工具和技术也源自MacOSX平台。尽管它和MacOSX很类似,但是没有MacOSX开发经验也可以开发iOS程序。iOSSDK提供了创建iOS应用程序所需要的环境和工具。利用iOSSDK开发应用时所用的编程语言是Objective-C。下面具体介绍一下iOS、语言、环境以及其他所用技术。2.1iOS简介iOS最初是设计在iPhone上的操作系统,苹果公司于2007年1月9日的Macworld大会上公布了这个系统,并命名为iPhoneOS,但随着此系统在iPodtouch、iPad以及AppleTV等苹果产品上的广泛应用,苹果公司于2010年6月7日WWDC大会上将其改名为IOS。据Canalys的数据显示,截止到2011年11月,iOS占据了全球智能系统市场份额的30%,在美国的市场占有率更是达到了43%。随着Andriod开源操作系统的异军突起以及WindowsPhone的发力,iOS市场份额正被一点点的蚕食,但是iOS设备的利润率高的惊人,以智能为例,iphone的利润额占到整个智能利润额的80%,受益于此,苹果的市值也达到了5000亿美元。操作界面iOS操作采用的是多点触控直接操作,控制方法包括滑动、轻触屏幕和图标及按键。操作有:滑动、轻按、缩小及放大。此外,iOS移动设备中还内置了加速器,使得旋转iOS设备时,界面也可以得到旋转,这也使得iPhone等便携设备更便于使用。自3GS开始,iphone装备有陀螺仪,这使得iphone有了重力感应,游戏效果更加的突出。屏幕的下方是home键,点按回到主界面。底部是dock,可安放四个使用者最经常使用的程序的图标。屏幕最上方是状态栏,显示一些有关资讯:如时间、电池电量和讯号强度等。其余的屏幕用于显示当前的应用程序。启动程序,只需点按该程序的图标,点按屏幕下方的home键即退出应用程序。在iPhone3.0及后续版本中,及时应用程序退出,当第三方软件收到了新的讯息时,苹果公司的服务器将把这些通知推送至iPhone或iPodTouch上(不管它是否正在运行中)。2.2Objective-C语言Objective-C,也通常被写作ObjC,是一种扩充C的面向对象编程语言,主要用于MacOSX和GNUstep这两个使用OpenStep标准的系统。Objective-C最开始并不支持垃圾回收,因为垃圾回收有漫长的“死亡时间”,会导致整个系统失去功用。但自Xcode4.0开始,支持自动释放,也就是ARC(AutomaticReferenceCounting)机制,不需要用户手动去Release每一个对象,编译器会在编译期间自动帮你添加那些以前你经常写的[NSObjectrelease]。Objective-C和C++有很多不同之处,Objective-C不支持运算符重载,也只允许对象单继承,但其引入的Categories和protocols可以提供很多多重继承的好处。很多常见的编译时的性能优化方法都不能应用于Obj-C,比如内联函数。2.3Xcode开发环境Xcode是开发苹果应用程序的必备开发环境,自4.0开始,开发人员就可以利用Xcode开发基于iOS的iPad、iPhone、iPodTouch设备应用程序,只要你有MacOSXSnowLeopard10.6.2以上版本MacOS操作系统,便可安装iossdk,如果你有iOS设备,便可让Xcode把应用程序部署到你的iOS设备上。另外,你还可以使用iPhone仿真器进行调试。Xcode提供了友好而方便的应用程序开发环境,这样你就可以开发出好的iOS应用程序了。Xcode支持多种语言,如:C、C++、Objective-C、Java。另外,Xcode的编译速度也极快。Xcode还具有自由撤消的强大功能:Xcode4具有虚拟模型和设计功能,这可以让你更轻松的开发和维护应用程序。2.4SQLite数据库iOS包含了SQLite数据库,它是一个简单的、轻量级的数据库,并宣布是“世界上部署的最广泛的数据库引擎”。目前很多嵌入式产品都使用SQLite,SQLite占用资源非常的低,在嵌入式设备中,只需要几百K的内存就够了。它支持Windows/Linux/Unix等主流的操作系统,比起Mysql、PostgreSQL这两款世界著名的开源数据库管理系统,它的处理速度都比他们快。下面以具体实例的形式讲述创建SQLite的方法:1.创建数据库命令:若shopping.db文件已存在,则打开数据库,若不存在,则创建它。2.创建表格:createtableshopping(keyintegerprimarykey,itemtext,pricedouble,groupidinteger,dateaddeddate);3.插入数据:insertinto“shppinglist”(item,price,groupid,dateadded)values(“iPhone3G”,“199”,1,DATETIME(‘NOW’))4.查询:select*fromshoppinglist2.5JSON解析JSON(JavascriptObjectNotation)是一种轻量级的,以文字为基础,且易于让人阅读。尽管JSON是在Javascript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。 JSON格式是1999年《JavaScriptProgrammingLanguage,StandardECMA-2623rdEdition》的子集合,所以可以在JavaScript以eval()函式(javascript通过eval()调用解释器)读入。不过这并不代表JSON无法使用于其他语言,事实上几乎所有与网页开发相关的语言都有JSON函式库。JSON用于描述数据结构,有以下形式存在:1.对象(object):一个对象以“{”开始,并以“}”结束。一个对象包含一系列非排序的名称/值对,每个名称/值对之间使用“,”分割。2.名称/值对(collection):名称和值之间使用“:”隔开,一般的形式是:{name:value}一个名称是一个字符串;一个值可以是一个字符串,一个数值一个对象,一个布尔值,一个有序列表,或者一个null值。3.值的有序列表(Array):一个或者多个值用“,”分割后,使用“[”,“]”括起来就形成了这样的列表,形如:[collection,collection]4.字符串:以""括起来的一串字符。5.数值:一系列0-9的数字组合,可以为负数或者小数。还可以用“e”或者“E”表示为指数形式。6.布尔值:表示为true或者false。第三章需求分析需求分析LBS是由移动通信网络和卫星定位系统结合的一种增值业务,通过一组定位技术获得移动终端的位置信息,并提供给移动用户本人、他人及通信系统,实现相关信息服务的业务。值得注意的是,单独的位置信息不再是最终的服务,它需要结合有效内容的服务才能称得上是完整的LBS。因为传统意义上的导航服务作用是有限的,以导航为最终目的的服务往往只在用户处于相对陌生的环境时,才能满足用户需求。3.1设计背景随着近年来智能的爆炸性增长,LBS已经开始广泛被使用并在改变我们的生活:下班后的朋友聚会,可以用大众点评网搜索附近500米内最好吃的餐馆;用Google地图寻找最快捷的路线和抵达方式;在街旁网上签到分享自己和朋友大快朵颐的照片;发一条新微博,顺手添上自己所在的位置;高德导航可以轻松取代车载GPS,指引下一个聚会地。在这个背景下,基于LBS的服务类应用如雨后春笋般得以大量涌现。LBS基本模式:用户将信息上传到平台,进行信息管理与发布,根据需要决定开放的程度和内容,当用户需要开始基于位置的互动时,首先向平台开放定位搜索功能,并允许别人对自己进行定位。最后,平台利用其定位功能对用户进行定位,并对用户指定区域进行定位搜索,同时向用户提供所在地区的相关服务信息。用户根据反馈结果决定是否建立联系。3.2总体设计按照功能分成九大功能模块,如下表:表3-5程序功能表模块简述功能描述附近根据用户的位置,将用户所在位置的附近的签约商户的信息,显示在上,用户可以根据自己的需求选择所需要的服务,分门别类(如美食、酒店等)的进行展示搜索可以根据用户需求搜索关键字,通过输入商户名、地址等信息搜索特定商户和热门商区的商户信息。签到用户享受到商家的服务后,可以在该页面对商户的服务或商品进行评价,评分,改评价可以为以后的用户提供参考、对商户进行评价、上传照片、关注,商家可以凭借用户的好评。来提高自己的名声,吸引更多的消费者。优惠券显示正在进行的优惠商户信息,商家开始通过报纸杂志等传统平面媒体发布优惠券,并借此扩大自身品牌关注和知名度,就好比将派发的人扩大到了报纸所覆盖的区域,自然事半功倍。排行榜根据人气、评分等展示热门商户和最佳商户的排行记录收集展示收藏商户和浏览记录城市信息展示所选城市的生活信息如:医院、银行、公安机关等等更多显示自己的账户信息第四章详细设计与实现详细设计与实现根据需求分析,划分了九大功能模块,其中Neaby,ListInOrder,Coupons是本软件的特色及关键部分,具体功能如下所示:下图4-1为首页界面,最上方用一个UIButton显示城市信息,程序运行时判断当前有无已选城市,第一次运行时判断无已选城市,会跳到城市选择界面(图4-2)。向下紧接着是一个UISearchBar,触碰此searchBar会进入搜索界面。下方显示红色图片的是UIScrollView,其上是九个UIButton,设置各button的背景图片即为所展现之场景,点击各个button会进入个相应界面。图4-1首页视图以下代码为通过数据库判断是否已选择城市:-(void)viewDidAppear:(BOOL)animated{MySqlite*mysql=[[MySqlitealloc]init];if(flag>0){flag--;}if([mysqlgetCity]==nil){ChangeCity*city=[[ChangeCityalloc]init];[self.navigationControllerpushViewController:cityanimated:YES];[cityrelease];}else{NSString*cityString=[NSStringstringWithFormat:@"SPTKDir.%@",[mysqlgetCity]];UIButton*b=[UIButtonbuttonWithType:UIButtonTypeCustom];b.tag=13;b.frame=CGRectMake(29,6,262,33);[bsetTitle:cityStringforState:UIControlStateNormal];[bsetImage:[UIImageimageNamed:@"head1"]forState:UIControlStateNormal];[bsetImageEdgeInsets:UIEdgeInsetsMake(0,205,0,0)];[bsetTitleEdgeInsets:UIEdgeInsetsMake(0,-50,0,0)];[baddTarget:selfaction:@selector(qwer:)forControlEvents:UIControlEventTouchUpInside];b.titleLabel.font=[UIFontfontWithName:@"Helvetica-Bold"size:18];self.navigationItem.titleView=b;}[mysqlrelease];}如下图4-2为附近界面,用一个UITableView列表显示信息。 在viewController中设置此tableView的delegate和dataSource为self。在viewController声明文件中遵循UITableViewDelegate和UITableViewDataSource协议,在实现文件中实现UITableViewDelegate和UITableViewDataSource的相应方法:主-(NSInteger)tableView:(UITableView*)tableViewnumberOfRowsInSection:(NSInteger)section,-(UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexPath:(NSIndexPath*)indexPath。图4-2附近界面 代码如下:-(NSInteger)tableView:(UITableView*)tableViewnumberOfRowsInSection:(NSInteger)section{return[[ListDataobjectAtIndex:0]count];} 上面的方法中return的数据为一个section的行数。-(UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexPath:(NSIndexPath*)indexPath{staticNSString*CellIdentifier=@"Cell";UITableViewCell*cell=[tableViewdequeueReusableCellWithIdentifier:CellIdentifier];if(cell==nil){cell=[[[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:CellIdentifier]autorelease];}cell.textLabel.text=[[ListDataobjectAtIndex:0]objectAtIndex:indexPath.row];cell.textLabel.font=[UIFontboldSystemFontOfSize:14];cell.imageView.image=[UIImageimageNamed:[[ListDataobjectAtIndex:1]objectAtIndex:indexPath.row]];cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;returncell;} 上面的方法中是实现cell的具体代码。 点击各cell时,调用-(void)tableView:(UITableView*)tableViewdidSelectRowAtIndexPath:(NSIndexPath*)indexPath;方法,进入相应界面代码如下:-(void)tableView:(UITableView*)tableViewdidSelectRowAtIndexPath:(NSIndexPath*)indexPath{if(indexPath.row==0){SearchCoupon*tabView=[[SearchCouponalloc]init];TKSPAppDelegate*appDelegate=[[UIApplicationsharedApplication]delegate];[appDelegate.navigationControllerpushViewController:tabViewanimated:YES];[tabViewrelease];}elseif([[[ListDataobjectAtIndex:0]objectAtIndex:indexPath.row]isEqualToString:@"Moreclassification"]){MoreCategoriesTable*nextView=[[MoreCategoriesTablealloc]init];nextView.title=@"Moreclassification";[self.navigationControllerpushViewController:nextViewanimated:YES];[nextViewrelease];}else{NearbyOther*nextView=[[NearbyOtheralloc]init];nextView.flag=0;nextView.lat=lats;nextView.lon=lons;nextView.string=[[ListDataobjectAtIndex:0]objectAtIndex:indexPath.row];nextView.title=[[ListDataobjectAtIndex:0]objectAtIndex:indexPath.row];[self.navigationControllerpushViewController:nextViewanimated:YES];[nextViewrelease];}}如图4-3为搜索界面:图4-3搜索界面在表格的上方是一个searchBar,设置此表格的headerView为此searchBar,可以实现此searchBar随着table上下拖动。触碰上方的searchBar后触发-(void)searchBar:(UISearchBar*)searchBartextDidChange:(NSString*)searchText;方法,代码如下:-(void)searchBar:(UISearchBar*)searchBartextDidChange:(NSString*)searchText{if([NearbyLogicControlconnectedToNetwork]){NearbyLogicControl*logic=[[NearbyLogicControlalloc]init];searchData.listData=[logicgetSearchDetail:searchText];[logicrelease];self.searchDisplayController.searchResultsDataSource=searchData;self.searchDisplayController.searchResultsDelegate=searchData;}} 上述代码中:首先判断是否连接网络:[NearbyLogicControlconnectedToNetwork],若值为yes,则根据输入的字符串进行搜索并显示。显示时,要设置searchDisplayController的searchResultsDataSource和searchResultsDelegate的值为searchData。 搜索结果如图4-4显示:图4-4搜索结果界面如图4-5为签到界面:由于页面较多采用UITabBarController,将各个viewController添加到一个数组,再设置UITabBarController的viewControllers为此数组即可。当需要组织或组合多个不同领域的功能时,就可以使用UITabBarController。每个功能领域有自己的图标按钮,并且只有用户单击它时才激活。通过setTitle设置每个功能图标的名称,setImage设置图片。图4-5签到界面 实现代码如下:-(id)init{self=[superinitWithNibName:nilbundle:nil];if(self){self.title=@"Check-in";Activity*SecondTabView=[[Activityalloc]init];[SecondTabView.tabBarItemsetTitle:@"Activities"];[SecondTabView.tabBarItemsetImage:[UIImageimageNamed:@"a2"]];UIViewController*ThirdTabView;MySqlite*mysql=[[MySqlitealloc]init];if([mysqlgetUser]){ThirdTabView=[[MySettingsalloc]init];}else{ThirdTabView=[[WhatCheckInalloc]init];}[ThirdTabView.tabBarItemsetTitle:@"Me"];[ThirdTabView.tabBarItemsetImage:[UIImageimageNamed:@"d2"]];[mysqlrelease];SignToMe*FourthTabView=[[SignToMealloc]init];[FourthTabView.tabBarItemsetTitle:@"Iwanttocheck-in"];[FourthTabView.tabBarItemsetImage:[UIImageimageNamed:@"签.png"]];SignNear*FirstTabView=[[SignNearalloc]init];[FirstTabView.tabBarItemsetTitle:@"CloseCheck-in"];[FirstTabView.tabBarItemsetImage:[UIImageimageNamed:@"c2"]];self.viewControllers=[NSArrayarrayWithObjects:FirstTabView,SecondTabView,ThirdTabView,FourthTabView,nil];[FirstTabViewrelease];[SecondTabViewrelease];[ThirdTabViewrelease];[FourthTabViewrelease];}returnself;}在此模块显示正在进行的优惠商户信息,由于页面较多仍然使用UITabBarController以展示更多信息,每个页面都有一个UITabelView,其上放置一个searchBar,以实现搜索功能。界面如图4-6所示:图4-6优惠券界面 初始化UITabBarController代码如下:-(id)init{self=[superinitWithNibName:nilbundle:nil];if(self){self.title=@"Coupons";NearbyDetail*FirstTabView=[[NearbyDetailalloc]init];[FirstTabView.tabBarItemsetTitle:@"Lastcoupons"];[FirstTabView.tabBarItemsetImage:[UIImageimageNamed:@"c2"]];NearbyHot*ThirdTabView=[[NearbyHotalloc]init];[ThirdTabView.tabBarItemsetTitle:@"NewCoupons"];[ThirdTabView.tabBarItemsetImage:[UIImageimageNamed:@"f2"]];NearbyHot*FourthTabView=[[NearbyHotalloc]init];[FourthTabView.tabBarItemsetTitle:@"HotCoupons"];[FourthTabView.tabBarItemsetImage:[UIImageimageNamed:@"e2"]];NearbySearch*SecondTabView=[[NearbySearchalloc]init];[SecondTabView.tabBarItemsetTitle:@"SearchCoupons"];[SecondTabView.tabBarItemsetImage:[UIImageimageNamed:@"h2"]];self.viewControllers=[NSArrayarrayWithObjects:FirstTabView,SecondTabView,ThirdTabView,FourthTabView,nil];[FirstTabViewrelease];[SecondTabViewrelease];[ThirdTabViewrelease];[FourthTabViewrelease];//NSLog(@"%d",[FirstTabViewretainCount]);}returnself;}如图4-7为今日团购界面:图4-7今日团购界面其中中间展示信息的部分用的是UIWebView,正如它的名字,它是用于展示网站的,在此展示网站的团购优惠信息。首先,利用网址字符串构造一个NSURL对象,再由此NSURL对象构造一个NSURLRequest对象,最后通过UIWebView的loadRequest方法就得以展示网站信息了,具体实现代码如下:-(void)viewDidLoad{[superviewDidLoad];self.title=@"Snapupshopping";NSString*string=@"://thukhashwepyi/tuan/wap/index.php";//NSString*string=@"";NSURL*url=[NSURLURLWithString:string];NSURLRequest*request=[NSURLRequestrequestWithURL:url];[webGouploadRequest:request];[stringrelease];//[requestrelease];}此模块是根据人气、评分等展示热门商户和最佳商户的排行的,效果如图4-8:图4-8排行榜界面触碰cell后触发-(void)tableView:(UITableView*)tableViewdidSelectRowAtIndexPath:(NSIndexPath*)indexPath;函数,代码如下:-(void)tableView:(UITableView*)tableViewdidSelectRowAtIndexPath:(NSIndexPath*)indexPath{ListDetail*listView=[[ListDetailalloc]init];[listViewinitWithTitleLable:[[listDataobjectAtIndex:0]objectAtIndex:indexPath.row]];[self.navigationControllerpushViewController:listViewanimated:YES];[listViewrelease];}进入各分类排行,以MostpopularFood为例,如图4-9MostpopularFood界面:图4-9MostpopularFood界面进入界面后,从网络加载数据,下载图片,下载图片时,用UIActivityIndicatorView展示旋转等待状态,利用NSData的dataWithContentsOfURL方法实现下载,下载完成后,等待状态要消除,利用UIActivityIndicatorView的stopAnimating方法实现。代码如下:-(void)downPicture:(UIImageView*)iv{NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];UIImage*image=[[UIImagealloc]initWithData:[NSDatadataWithContentsOfURL:[NSURLURLWithString:[[ListDataobjectAtIndex:iv.tag]photo]]]];iv.image=image;[((UIActivityIndicatorView*)[ivviewWithTag:21])stopAnimating];[pooldrain];}-(NSInteger)tableView:(UITableView*)tableViewnumberOfRowsInSection:(NSInteger)section{return[ListDatacount];}不难发现,此tableView的高度明显要高,自定义高度只需在(CGFloat)tableView:(UITableView*)tableViewheightForRowAtIndexPath:(NSIndexPath*)indexPath;方法中return你需要的高度,不实现此函数,则表示高度为默认值44,代码如下:-(CGFloat)tableView:(UITableView*)tableViewheightForRowAtIndexPath:(NSIndexPath*)indexPath{return90;}触碰各cell后,触发-(void)tableView:(UITableView*)tableViewdidSelectRowAtIndexPath:(NSIndexPath*)indexPath;函数,在此函数中要先实例化下一界面,然后进入这一界面,代码如下:-(void)tableView:(UITableView*)tableViewdidSelectRowAtIndexPath:(NSIndexPath*)indexPath{BusinessDetail*businessView=[[BusinessDetailalloc]initWithSid:[[ListDataobjectAtIndex:indexPath.row]busniessID]];TKSPAppDelegate*appDelegate=[[UIApplicationsharedApplication]delegate];[appDelegate.navigationControllerpushViewController:businessViewanimated:YES];[businessViewrelease];}签到界面如图4-10:图4-10签到界面触碰check-innow按钮后,先判断用户是否登录,若登录则进入checkView界面,若用户没有登录则利用UIAlertView提示用户登录,代码如下:-(IBAction)CheckIn:(id)sender{MySqlite*mysql=[[MySqlitealloc]init];if([mysqlgetUser]){CheckInPage*checkView=[[CheckInPagealloc]init];checkView.myId=[mysqlgetUser];checkView.businessId=sid;[selfpresentModalViewController:checkViewanimated:YES];[checkViewrelease];}else{flag=1;UIAlertView*alert=[[UIAlertViewalloc]initWithTitle:@"Prompted"message:@"Pleaseloginfirst"delegate:selfcancelButtonTitle:@"Cancel"otherButtonTitles:@"Login",nil];[alertshow];[alertrelease];}[mysqlrelease];}若用户已登录则直接进入checkView界面,如下图4-11所示:图4-11签到评论界面在此页面用户可以在textView中输入评论信息,触碰Addphoto按钮时弹出一actionSheet,提示用户是通过照相还是从照片库中选取图片来实现插入图片或取消插入功能,另外,需要说明的是选取无论是选取图片还是照相都是通过照片选取器UIImagePickerController来实现的,具体代码如下:-(void)actionSheet:(UIActionSheet*)actionSheetclickedButtonAtIndex:(NSInteger)buttonIndex{NSLog(@"%d",buttonIndex);if(buttonIndex==0){UIImagePickerController*imageView=[[UIImagePickerControlleralloc]init];imageView.sourceType=UIImagePickerControllerCameraDeviceFront;imageView.delegate=self;[selfpresentModalViewController:imageViewanimated:YES];[imageViewrelease];}elseif(buttonIndex==1){UIImagePickerController*imageView=[[UIImagePickerControlleralloc]init];imageView.delegate=self;[selfpresentModalViewController:imageViewanimated:YES];[imageViewrelease];}}-(void)imagePickerController:(UIImagePickerController*)pickerdidFinishPickingImage:(UIImage*)imageeditingInfo:(NSDictionary*)editingInfo{[pickerdismissModalViewControllerAnimated:YES];[imageButtonsetImage:imageforState:UIControlStateNormal];}评论完,触碰submit按钮完成提交签到,首先检查网络是否联通,联通情况下完成提交,若提交成功,通过UIAlertView提示提交成功,具体代码如下:-(IBAction)submitCheckInfo:(id)sender{//提交签到信息接口if([NearbyLogicControlconnectedToNetwork]){NearbyLogicControl*logic=[[NearbyLogicControlalloc]init];CGSizeitemSize=CGSizeMake(80,100);UIGraphicsBeginImageContext(itemSize);CGRectimageRect=CGRectMake(0,0,80,100);[imageButton.imageView.imagedrawInRect:imageRect];imageButton.imageView.image=UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();NSData*imageData=UIImagePNGRepresentation(imageButton.imageView.image);//NSString*string=[[NSStringalloc]initWithData:imageDataencoding:NSASCIIStringEncoding];if([logicsubmitCheck:businessIdChecks:textView.textPicture:nilMyId:myIdPdata:imageData]){UIAlertView*alertv=[[UIAlertViewalloc]initWithTitle:@"Prompted"message:@"Congratulations!,Credit+4"delegate:selfcancelButtonTitle:@"OK"otherButtonTitles:nil,nil];[alertvshow];[alertvrelease];}else{UIAlertView*alertv=[[UIAlertViewalloc]initWithTitle:@"Prompted"message:@"Check-infailed,Max.fourtimesallowedforthisbusiness"delegate:selfcancelButtonTitle:@"OK"otherButtonTitles:nil,nil];[alertvshow];[alertvrelease];}[logicrelease];}else{UIAlertView*alertv=[[UIAlertViewalloc]initWithTitle:@"Prompted"message:@"Connectfaild"delegate:selfcancelButtonTitle:@"OK"otherButtonTitles:nil,nil];[alertvshow];[alertvrelease];}}在此模块,用户浏览的商户信息浏览记录在此展示,用户在进入商户浏览商户信息前,先将商户信息存储到本地数据库,再通过读取数据库信息,查看浏览记录,界面效果如图4-12:图4-12浏览记录界面界面实现代码如下:-(void)viewDidLoad{[superviewDidLoad];self.title=@"RecentlyViewed";tableList.delegate=self;tableList.dataSource=self;MySqlite*sqlite=[[MySqlitealloc]init];ListData=[sqlitegetBusiness];[sqliterelease];UIBarButtonItem*item=[[UIBarButtonItemalloc]initWithTitle:@"Clear"style:UIBarButtonItemStyleBorderedtarget:selfaction:@selector(Clear:)];self.navigationItem.rightBarButtonItem=item;}将商户信息存储到本地数据库,代码如下:-(BOOL)SaveBusinessInfo:(BusinessInfo*)shop{ NSString*sql=[NSStringstringWithFormat:@"INSERTINTOBusinessList(sid,sn,score,cost,address,purl,subname,tag)VALUES('%@','%@','%@','%@','%@','%@','%@','%@');",shop.busniessID,shop.businessName,shop.score,shop.cost,shop.Address,shop.photo,shop.businessTitle2,shop.Tag]; //NSLog(@"SQL==%@",sql); intstatus=sqlite3_exec(database,[sqlUTF8String],0,0,NULL);// NSLog(@"SQL==%d",status);returnstatus;}触碰Clear实现清空记录,通过删除数据库数据实现,代码如下:-(void)Clear:(id)sender{MySqlite*sqlite=[[MySqlitealloc]init];[sqliteopendatabase];[sqlitedeleteTempBusiness];ListData=[sqlitegetBusiness];[tableListreloadData];[sqliteclose];[sqliterelease];}在此模块,展示该城市的公共服务信息,如医院,警察局等,还是通过UITableView显示,界面如图4-13:图4-13城市信息界面实现代码如下:-(NSInteger)tableView:(UITableView*)tableViewnumberOfRowsInSection:(NSInteger)section{return13;} 上面返回的是cell的个数。 再调用-(UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexPath:(NSIndexPath*)indexPath实现各个cell。此模块主要实现用户登陆,城市选择,建议反馈,帮助,关于功能,在此主要介绍一下用户登陆,因为其他功能在前面所述中均已涉及,不做过多赘述。界面效果如图4-14:图4-14更多界面判断是否已登录的代码如下:cell.textLabel.text=@"Accountsettings";MySqlite*mysql=[[MySqlitealloc]init];if([mysqlgetUser]!=nil){cell.detailTextLabel.text=[mysqlgetUser];}else{

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论