Uber打车app项目的功能模块主要有一下几点Demo:
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 搜索目标位置
效果图如下图所示:
- 首页启动效果
在整个过程中处理bug的相关日志
1 开发自定义的xib的时候需要先关联class,但是xib关联方式和storyboard的关联方式是不一样的。
2 还有个问题就是在实例化一个view的时候,出现了这样的错误。
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之间的关联。
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中
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中
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
其中可能有一些地方是不太满足我们的要求,因此需要我们对第三方控件进行调整。
public class KGDrawerSpringAnimator: NSObject {
//缩放比例
let kKGCenterViewDestinationScale:CGFloat = 1.0
9 处理tableViewCell的cell时候,需要改变cell的背景色的问题:
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。
11 这个问题处理完以后,还有一个问题就是因为有多个输入框的自动布局的bug,没有办法让他们根据屏幕的宽度自动调整他们之间的间距,这里想到了一个办法,就是将这个4个view底层在嵌入到一个大的view中去,这个可是让4个view以这个大的view标准,然后这个大的view来去自适应我们的屏幕宽度。
12 自定义ScrollView的概念,加入百度地图SDK
13 利用Cocoapods加入第三方控件百度地图SDK
,Alamofire
14 在使用百度地图SDK的时候,没有问题,但是引入时系统就报错了
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上面下载我们的代码,然后重新手动导入。