# Uber **Repository Path**: chenbinghuilove/Uber ## Basic Information - **Project Name**: Uber - **Description**: Swift练手项目 - **Primary Language**: Swift - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2016-03-10 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #Uber打车app项目的功能模块主要有一下几点: 1 首页启动播放AV效果 2 注册流程 2.1 选取国家,回调国家编号,保存在CoreData持久化 2.2 上传用户头像,用户信息 2.3 手机端发送验证码 2.4 完成注册上传用户信息到Bmob上面 2.5 绑定银行卡,支付宝,银联,京东等信息(继承sdk) 3 登陆流程 4 主页用户定位 5 侧边栏效果实现 6 主页用户信息设置 7 集成百度sdk 8 实时更新当前车辆的位置信息 9 付款流程 10 搜索目标位置 #效果图如下图所示: 1. 首页启动效果 ![Uber1.gif](http://upload-images.jianshu.io/upload_images/1397676-00757d65a6fb183c.gif?imageMogr2/auto-orient/strip) #在整个过程中处理bug的相关日志 1 开发自定义的xib的时候需要先关联class,但是xib关联方式和storyboard的关联方式是不一样的。 ![屏幕快照 2016-03-11 10.49.47.png](http://upload-images.jianshu.io/upload_images/1397676-f1179e02f94a01e2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 2 还有个问题就是在实例化一个view的时候,出现了这样的错误。 ```Swift `Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "GuidPage" nib but the view outlet was not set` ``` 然后按照视频教程的操作说明看了下,发现了没有关联Reference Outlet和view之间的关联。 ![屏幕快照 2016-03-11 11.13.37.png](http://upload-images.jianshu.io/upload_images/1397676-adf0f799ac720cc9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 3 在跟着视频做视图的时候,有一个地方不注意的话就会很麻烦,在做uberDemo加载logo的视图中,由于没有将View的底色调制黑色以至于显示出来的logo都是以白色为底色。这个问题困扰了我一个下午,在晚上的时候终于搞出来了。 4 还有一个地方就是在加载图层layer是有两个方法: `let playerLayer = AVPlayerLayer(player: player)`和`let playerLayer = AVPlayerLayer(layer: player)` 进过查看底层代码发现根本就没有后者这个方法体。 5 对代理模型的理解还是不够,导致了每次使用代理模型的时候总是需要上网查看相关资料, 谁要传值谁建代理,接收方实现该代理,并且接收方还要绑定该代理。 解决办法: BController要传值给AController, 首先,在BController类中建立`protocol BDelegate`,并且发布这个代理(也就是定义这么一个变量)`var delegate: SelectCountryDelegate?` 其次,要在接收方AController中实现该代理和绑定该代理。从哪个方法跳转到BController中 ```Swift class RegisterPage: FxBasePage,SelectCountryDelegate{ @IBAction func doSelectCountry(){ let page = SelectCountry() page.delegate = self let navPage = UINavigationController(rootViewController: page) self.presentViewController(navPage, animated: true, completion: nil) } ``` 最后,就是传值操作了,在BController中 ```Swift let country = datas[indexPath.row] print(FxString.getTheLocalAreaCode(country.code)) delegate!.setCountryCodeAndFlag(FxString.getTheLocalAreaCode(country.code), flag: "\(country.code).png") ``` 6 在集成银联sdk的时候,出现了问题。问题在于没有按照人家给的sdk部署文档去做,少配置了一个参数导致的。 `在工程的Build Settings中找到Other Linker Flags中添加-ObjC宏` 7 上午来单位后仔细阅读了银联的SDK配置文件,将周日的那个bug给搞定了。原因就是因为没有配置Other Linker Flags `在工程的Build Settings中找到Other Linker Flags中添加-ObjC宏 ` 8 侧边栏的滑动效果需要使用第三方的控件来进行处理。这里我们可以去github上面找一些第三方的控件来满足我们的要求。 `KGFloatingDrawer` 其中可能有一些地方是不太满足我们的要求,因此需要我们对第三方控件进行调整。 ```Swift public class KGDrawerSpringAnimator: NSObject { //缩放比例 let kKGCenterViewDestinationScale:CGFloat = 1.0 ``` 9 处理tableViewCell的cell时候,需要改变cell的背景色的问题: ```Swift cell.contentView.backgroundColor = UIColor.blackColor() cell.textLabel?.text = payInfo.name cell.textLabel?.textColor = UIColor.whiteColor() cell.textLabel?.backgroundColor = UIColor.blackColor() cell.imageView?.image = UIImage(named: payInfo.icon) cell.accessoryType = .None ``` 10 还有一个问题就是imageView在建立约束的时候,不能够针对其所在容器的尺寸进行建立,这个问题我猜有可能是imageView不是一个view的缘故,针对这个问题,需要在创建一个view底层+imageView+textfield。 ![屏幕快照 2016-03-16 10.37.05.png](http://upload-images.jianshu.io/upload_images/1397676-5e96563b6c077f6a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 11 这个问题处理完以后,还有一个问题就是因为有多个输入框的自动布局的bug,没有办法让他们根据屏幕的宽度自动调整他们之间的间距,这里想到了一个办法,就是将这个4个view底层在嵌入到一个大的view中去,这个可是让4个view以这个大的view标准,然后这个大的view来去自适应我们的屏幕宽度。 12 自定义ScrollView的概念,加入百度地图SDK 13 利用Cocoapods加入第三方控件`百度地图SDK`,`Alamofire` 14 在使用百度地图SDK的时候,没有问题,但是引入时系统就报错了 ```Swfit Release-iphonesimulator/Pods.framework/Pods(Pods_vers.o)) was built for newer iOS version (8.4) than being linked (8.0) Undefined symbols for architecture i386: "_OBJC_CLASS_$_BMKMapManager", referenced from: Uber.AppDelegate.addMapPage (Uber.AppDelegate)() -> () in AppDelegate.o l_get_field_types_AppDelegate in AppDelegate.o "_OBJC_CLASS_$_BMKMapView", referenced from: Uber.HomeCenterPage.viewDidLoad (Uber.HomeCenterPage)() -> () in HomeCenterPage.o l_get_field_types_HomeCenterPage in HomeCenterPage.o ld: symbol(s) not found for architecture i386 clang: error: linker command failed with exit code 1 (use -v to see invocation) ``` 15 重新创建一个项目是可以通过Cocoapods导入百度地图sdk的并且能够正常显示出来,那么问题来了就是因为在之前通过手动导入了一些银联的sdk包然后修改了里面的一些属性信息导致了这样的错误。 16 解决办法我想重新从git上面下载我们的代码,然后重新手动导入。 17 didUpdateBMKUserLocation该方法不会被调用不知道是什么原因。 18 如果有两个视图在xib中进行管理的话,那么需要调整他们之间的位置,其实说白了就是图层的叠加罢了。这里有一个函数 ```Swift //将这个视图放在前面 self.view.bringSubviewToFront(bottomView) ``` 19 还有手动配置视图数据时,主要牵涉到位置坐标的问题,这里需要重新回顾一下: 在window中的坐标系统的位置:frame和bounds的区别 frame是相对父坐标系的位置和大小,bounds是当前view的位置和大小 ![屏幕快照 2016-02-26 09.49.39.png](http://upload-images.jianshu.io/upload_images/1397676-7171cd7906cdd93e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)