「iOS」行车服务app 「客户端、后端思路+代码」

  • 近些年开销了一个天车服务项目,iOS客户端应用Objective-C编排,
    后端采用PHP搭建,部署在阿里云,操作系统也Linux CentOS 7.3,数据库MySQL,服务器也Apache,是比基础之LAMP组合。
  • iOS端代码有我会讲述整体的开发思路,一些有意思的法力点为会见详细说说。
  • 后端代码比较简单,想使团结尝试开发API的iOS开发者可以参照。
  • 犯就篇文的根本目的是针对性近年来底开发做一个完好无损回顾,同时愿意对有要之同室提供到有些帮扶,有多不尽合理和全面的地方,也请各位同学不吝赐教,感谢大家!

首先上整的成效图:

必发bifa88手机客服端 1

show.gif

以POI检索结果页面,地图控件显示也空,是因模拟器运行的原由,真机效果出色

这里是 iOS项目地址后端项目地址 。如果发帮带,希望点转Star因为显示鼓励,感谢~

这边是后端代码简析的篇章后端代码简析

「Tips」:对于发现代码运行报错的同学,项目动CocoaPods拓展第三方库的融会。之前为便利自己本着Pods文本夹做了ignore操作。刚刚已更新,大家可以一直打开后缀为xcworkspace的花色文件运行。不过这样Github地方的色体积会比较深。

简短介绍:项目UI整体尽量保持了饿了么的蓝色风格,其中一些页面参考了高德地图饿了么Max+的计划性风格。

花色效益点

  • 账户、用户资料管理
  • 参照饿了么UI的原则性、天气模块
  • 基于高德地图API开发的POI检索,同时界面也投入了有跟高德地图app类似的风味
  • 由定义交互逻辑的预约及结果通知功能
  • 简短参照Max+app的资讯模块
  • 用户历史足迹、历史事件维护

项目用及的API及第三方库

  • 高德地图API
  • 和风天气API
  • 自己搭建的后端相关接口
  • AFNetworking 3.0
  • SDWebImage
  • MBProgressHUD
  • 品种外之Icon恢宏用阿里巴巴底iconfont图标,极力推荐

色涉嫌的技术点

  • 高德地图API的有关应用。包括地图POI检索导航等功能。
  • GCD的利用示例。包括耗时操作的后台执行、UI更新相关操作相当。
  • NSUserDefaults保护账户信息。这里是吧使用方便,仅供参考。
  • Core Animation的使用。由于TableView加载时采取HUD的用户体验不是蛮友善,我好包裹了Loading页面。

开思路

  • #### 登录注册页面

必发bifa88手机客服端 2

IMG_2008.PNG

  • 色初始化时用Tabbar VC作为rootController,如果此时没账户信息,则使模态弹出方式弹来登录页面。

  • 就一部分比较简单,客户端会先对用户输入的音信进行简单的法定判断,然后调用登录接口。

  • 发出局部关于TextField的点击空白和Return回收键盘和呼出键盘时控件移位防止遮挡的代码可以小心一下。

  • Tabbar VC初始化时,第一单tab栏的VC会进展固化操作,如果这为就报到状态,则直调用发送历史足迹的接口。在未登录状态下,用户点击登录按钮,登录成功时,会往第一独tab栏VC发送一个调用历史足迹接口的通知

  • #### 主界面(tabbar栏首页)

必发bifa88手机客服端 3

IMG_2009.PNG

必发bifa88手机客服端 4

IMG_2010.PNG

  • ##### 地理位置和天气有。

    • 这一部分是独自包装的View,UI参考了饿了么。地理位置以及通报列表按钮的点击事件使代理及由时VC实现。
    • 由于模拟器定位赢得之坐标无法使高德地图的国内API,我本着运作条件做了瞬间判定,如果是模拟器运行,则装了默认坐标,对许地点大概是北京市海淀区北京理工大学
    • 脚下VC加载过程被,开启定位,在地理位置反编码的功成名就回调中调用天气信息的接口。注意地理位置与气候信息之UI更新放在主线程执行。
    • 点击地理位置的亲笔时,会模态弹出重新定位的界面,重新定位按钮的点击事件使代理及由主界面VC实现,避免以这界面再次实例化定位有关的目标。
  • ##### 功能栏

    • 使用UICollectionView展示。各个CellIcon使用阿里巴巴底iconfont图标,将过去的图片素材转为字体来运,对于素材整理、高清保真、代码方便来说有特大的效率提升。在Web移动客户端出领域已死常见地以采取。
  • ##### 某同作用VC

必发bifa88手机客服端 5

IMG_2011.PNG

  • 这部分UI参考了高德地图附近界面UI以及一些特性。导航栏隐去,最上面是一个地形图控件,以及透明底回按钮。下面是POI信息的tableview。在tableview向阳下滑动时,地图隐去,tableviewframe达到换,导航栏出现。向上滑动到顶部时,tableview沉,地图出现,导航栏隐去。
  • tableview滑时特性的兑现:通过scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate代办方,判断滑动的矛头,从而对tableviewframe以及导航栏等因素进行操作。
    代码如下:

//判断滑动手势方向,决定tableview的frame改变
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
  CGPoint translation = [scrollView.panGestureRecognizer translationInView:scrollView.superview];
  if (translation.y>0) {
      NSLog(@"ssssss");
      {
          NSIndexPath *dic = self.poiList.indexPathsForVisibleRows.firstObject;
          if (self.poiList.frame.origin.y == 64 && dic.row == 0){
              [UIView animateWithDuration:0.2 animations:^{

                  NSLog(@"visible:::%@",dic);
                  showMap = YES;
                  self.navigationController.navigationBar.hidden = YES;
                  self.poiList.frame = listFrame;
              }];
          }
      }
  }else if(translation.y<0){
      NSLog(@"tttt");
      if (self.poiList.frame.origin.y == 300){
          [UIView animateWithDuration:0.2 animations:^{
              showMap = NO;
              self.navigationController.navigationBar.hidden = NO;
              self.poiList.frame = listFullFrame;
          }];
      }
  }
}
  • 每当界面加载时,使用了和睦包的loading页面:

    必发bifa88手机客服端 6

    IMG_2018.PNG

    • 于页面view加载的顶初步,将loading页的view加入到目前VC的view中。在页面数据加载成功的回调中,调用tableviewreload方法,而后将loading页移除。
    • loading页使用basicAnimation制造了简要的呼吸动画,keyPath啊logo图标的透明度。
  • 第一个cell的POI地点默认可预约,显示预约图标,点击上预约界面。

    必发bifa88手机客服端 7

    IMG_2012.PNG

    • 斯局部的跟后端的互逻辑是友好定义之。一般的预约过程是预约请求发送成功后,一段时间内由公寓家进行同意或者拒绝操作,而后客户端收到结果回执。由于本档简单模拟此过程,均以http共谋进行通信。所以我之兑现方式是后端收到预约请求后,直接用擅自数方模拟店家的领或者拒绝。一定时间晚,客户端调用结果查询的接口来获得预约结果。
    • 落实方式吧,点击预定按钮,若预约接口调用成功,按钮字样变为预约中,钟表icon开始转动,并且按钮变为不可点击状态。与此同时,使用performSelector办法延时调用获取预约结果的接口。在这网要的打响回调中,向主界面发送通知,而后主界面通知按钮右侧显示通知数量之辛亥革命图标。如图。
    • 这边通知列表的数据是在UserDefaults中之,不同装备中无法一起。其中涉嫌到片userDefaults遇数量要求的知识,具体可以参照代码。这里是为要求是临时想生,如果正常实现方式索要支出获取通知数据的接口。我为节约出时间所以采取这种办法来效仿实现了。这个地方以后头可圆~

      必发bifa88手机客服端 8

      IMG_2013.PNG

  • #### 资讯Tab栏

必发bifa88手机客服端 9

IMG_2014.PNG

  • 此地没有花了多之生气。数据预置了网易新闻有关数据。界面UI参考了自身常使的Max+iOS客户端的讯息功能。第一只Cell以备图为背景,可以就此来突出展示主要内容。

  • 快讯详情页是一个粗略的webView。同样以了温馨包的Loading图。移除时机就是概括在了webViewfinishLoad回调方法中。必发bifa88手机客服端其实对Webview诚然加载成功时的判定还有多得且的东西,日后上。

  • #### 设置页面

必发bifa88手机客服端 10

IMG_2015.PNG

  • 以此页面显而易见是用简单独sectiontableview兑现。在页面的viewWillAppear道吃,需要调用获取缓存数据大小的不二法门,单独更新清除缓存cell的情。因为当每次切换tab的进程中,缓存数据都起或发生变化。

  • ##### 个人信息

    • 页面还采用tableview落实。在信息编辑页面,仿照了微信信变更页面的逻辑。页面出现经常,立即弹来键盘。关于要textField以页面加载成功时就化第一响应者的题材,需要重写- (BOOL)becomeFirstResponder措施。代码如下:

    - (BOOL)becomeFirstResponder
    

{
[super becomeFirstResponder];
return [self.textInput becomeFirstResponder];
}
“`

必发bifa88手机客服端 11

IMG_2016.PNG

  • ##### 历史足迹、历史预定、积分信息

必发bifa88手机客服端 12

IMG_2017.PNG

必发bifa88手机客服端 13

IMG_2019.PNG


这有些为照样以了打包的loading页面。如果数量条目为空,则非示tableview,提示暂无相关信息,如图。

  • ##### 清除缓存

    • 此实在仅仅下了SDImageCache的相干办法。我们尚可以排除本app的缓存数据所在目录来齐真正消弭缓存的目的,日后讨论。
    • 缓存数据获取之初步单位是B,我们用除以10241潮、2次来判定时数量是在KB级别或MB级别,并作科学显示。
  • ##### 退出登录

    • 点击是按钮,清除userDefaults中相关数据,然后模态弹出登录页面。
    • 此间可以小心的少数凡,我们在模态弹出登陆页,并且又登录后,界面是当脱离登录之前的页面的,也尽管是tab栏的老三个页面。如果想如果再次登录后,界面出现于tab栏的首页,我们可以当模态弹出登录页的做到回调中,对现阶段tabVC的selected index开展安装。代码如下:

    DELoginViewController *loginVC = [[DELoginViewController alloc] init];
            [self presentViewController:loginVC animated:YES completion:^{
                dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                    // 耗时的操作
                    dispatch_async(dispatch_get_main_queue(), ^{
                        // 更新界面
                        AppDelegate * appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
                        appDelegate.tabbarVC.selectedIndex = 0;
                    });
                });
            }];
    

代码的重点开支思路基本描述了,具体的底细大家可以跟自己连续交流~项目遭到有那么些不尽合理的贯彻方式,小一些是考虑到时刻因素。欢迎大家进行讨论、指教。
产生连带的问题,欢迎大家展开留言。项目受到运用的从发生接口,部署于自之阿里云服务器遭受,可外网访问。请求大家合理利用。

后端项目数据库相关的sql代码,我都上传至后端项目

苟大家产生趣味,以后自己可以再讲述一下server捧的代码,当然,后端平我呢是初大方的品位,仅供想使入门的同班参考。

自我的村办博客网站地址:
Halo的个体博客
,欢迎大家拜。

代码都开源,地址以文章首部。如果点转star,我确实会非常感谢~
halo

相关文章