• 近年来开了一个行车服务项目,iOS客户端应用Objective-C编纂,
    后端采用PHP搭建,部署在阿里云,操作系统为Linux CentOS 7.3,数据库MySQL,服务器也Apache,是较基础的LAMP组合。
  • iOS端代码有我会讲述整体的开发思路,一些妙不可言的意义点为会见详细说说。
  • 后端代码比较简单,想要协调尝试开发API的iOS开发者可以参见。
  • 作就篇文的最主要目的是对准新近底支付做一个整机回顾,同时要对发出得的同桌提供到一些辅助,有成百上千不尽合理和完善之地方,也要各位同学不吝赐教,感谢大家!

首先上整体的效用图:

新濠娱乐会员注册 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页面。

开思路

  • #### 登录注册页面

新濠娱乐会员注册 2

IMG_2008.PNG

  • 品类初始化时采用Tabbar VC作为rootController,如果这时候并未账户信息,则采用模态弹出方式弹来登录页面。

  • 眼看一部分比较简单,客户端会先对用户输入的音讯进行简易的官判断,然后调用登录接口。

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

  • Tabbar VC初始化时,第一个tab栏的VC会进行定点操作,如果这也曾经登录状态,则直接调用发送历史足迹的接口。在不登录状态下,用户点击登录按钮,登录成功时,会朝着第一单tab栏VC发送一个调用历史足迹接口的通知

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

新濠娱乐会员注册 3

IMG_2009.PNG

新濠娱乐会员注册 4

IMG_2010.PNG

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

    • 当下一部分凡是独自包装的View,UI参考了饿了么。地理位置和通知列表按钮的点击事件采取代理顶由目前VC实现。
    • 由模拟器定位赢得之坐标无法利用高德地图的境内API,我对运行环境做了瞬间断定,如果是模拟器运行,则装了默认坐标,对承诺地点大概是北京市海淀区北京理工大学
    • 现阶段VC加载过程遭到,开启定位,在地理位置反编码的中标回调中调用天气信息的接口。注意地理位置以及气象信息的UI更新放在主线程执行。
    • 点击地理位置的文字时,会模态弹出重新定位的界面,重新定位按钮的点击事件采取代理及由主界面VC实现,避免以这界面再次实例化定位有关的靶子。
  • ##### 功能栏

    • 使用UICollectionView展示。各个CellIcon行使阿里巴巴的iconfont图标,将昔日的图片素材转为字体来运,对于素材整理、高清保真、代码方便来说出特大的效率提升。在Web移动客户端开世界都大广泛地在采取。
  • ##### 某平等功能VC

新濠娱乐会员注册 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页面:

    新濠娱乐会员注册 6

    IMG_2018.PNG

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

    新濠娱乐会员注册 7

    IMG_2012.PNG

    • 夫有的跟后端的互动逻辑是投机定义之。一般的预约过程是预约请求发送成功后,一段时间内由公寓家进行同意或拒绝操作,而后客户端收到结果回执。由于本档简单模拟此过程,均采用http商事进行通信。所以自己之兑现方式是后端收到预约请求后,直接行使擅自数方模拟店家的受或拒绝。一定时间后,客户端调用结果查询的接口来获得预约结果。
    • 心想事成方式吧,点击预定按钮,若预约接口调用成功,按钮字样变为预约中,钟表icon开始旋转,并且按钮变为不可点击状态。与此同时,使用performSelector办法延时调用获取预约结果的接口。在是网要的成功回调中,向主界面发送通知,而后主界面通知按钮右侧显示通知数量之新民主主义革命图标。如图。
    • 这边通知列表的数量是有UserDefaults面临之,不同装备内无法同。其中提到到部分userDefaults受到数要求的学识,具体可参见代码。这里是为急需是临时想发出,如果正常实现方式要开发获取通知数据的接口。我为省出时间因此用这种措施来拟实现了。这个地方以随后可到~

      新濠娱乐会员注册 8

      IMG_2013.PNG

  • #### 资讯Tab栏

新濠娱乐会员注册 9

IMG_2014.PNG

  • 此处没消费了多的生命力。数据预置了网易新闻有关数据。界面UI参考了自己经常用的Max+iOS客户端的讯息功能。第一只Cell以统图也背景,可以用来突出展示主要内容。

  • 讯详情页是一个粗略的webView。同样采取了友好包裹的Loading祈求。移除时机就是简单在了webViewfinishLoad回调方法被。其实对Webview实在加载成功时的判定还有多足且的事物,日后加。

  • #### 设置页面

新濠娱乐会员注册 10

IMG_2015.PNG

  • 其一页面显而易见是使简单单sectiontableview落实。在页面的viewWillAppear艺术吃,需要调用获取缓存数据大小的道,单独更新清除缓存cell的情。因为以历次切换tab的长河遭到,缓存数据都生或发生变化。

  • ##### 个人信息

    • 页面还采用tableview心想事成。在信编辑页面,仿照了微信信变更页面的逻辑。页面出现经常,立即弹有键盘。关于要textField在页面加载成功时就是变成第一响应者的问题,需要重写- (BOOL)becomeFirstResponder方。代码如下:

    - (BOOL)becomeFirstResponder
    

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

新濠娱乐会员注册 11

IMG_2016.PNG

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

新濠娱乐会员注册 12

IMG_2017.PNG

新濠娱乐会员注册 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

网站地图xml地图