Uber打車app項目的功能模塊主要有一下幾點Demo:
1 首頁啟動播放AV效果
2 注冊流程
2.1 選取國家,回調(diào)國家編號,保存在CoreData持久化
2.2 上傳用戶頭像,用戶信息
2.3 手機端發(fā)送驗證碼
2.4 完成注冊上傳用戶信息到Bmob上面
2.5 綁定銀行卡,支付寶,銀聯(lián),京東等信息(繼承sdk)
3 登陸流程
4 主頁用戶定位
5 側(cè)邊欄效果實現(xiàn)
6 主頁用戶信息設(shè)置
7 集成百度sdk
8 實時更新當前車輛的位置信息
9 付款流程
10 搜索目標位置
效果圖如下圖所示:
- 首頁啟動效果
在整個過程中處理bug的相關(guān)日志
1 開發(fā)自定義的xib的時候需要先關(guān)聯(lián)class,但是xib關(guān)聯(lián)方式和storyboard的關(guān)聯(lián)方式是不一樣的。
2 還有個問題就是在實例化一個view的時候,出現(xiàn)了這樣的錯誤。
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "GuidPage" nib but the view outlet was not set
然后按照視頻教程的操作說明看了下,發(fā)現(xiàn)了沒有關(guān)聯(lián)Reference Outlet和view之間的關(guān)聯(lián)。
3 在跟著視頻做視圖的時候,有一個地方不注意的話就會很麻煩,在做uberDemo加載logo的視圖中,由于沒有將View的底色調(diào)制黑色以至于顯示出來的logo都是以白色為底色。這個問題困擾了我一個下午,在晚上的時候終于搞出來了。
4 還有一個地方就是在加載圖層layer是有兩個方法:
let playerLayer = AVPlayerLayer(player: player)
和let playerLayer = AVPlayerLayer(layer: player)
進過查看底層代碼發(fā)現(xiàn)根本就沒有后者這個方法體。5 對代理模型的理解還是不夠,導(dǎo)致了每次使用代理模型的時候總是需要上網(wǎng)查看相關(guān)資料,
誰要傳值誰建代理,接收方實現(xiàn)該代理,并且接收方還要綁定該代理。
解決辦法:
BController要傳值給AController,
首先,在BController類中建立protocol BDelegate
,并且發(fā)布這個代理(也就是定義這么一個變量)var delegate: SelectCountryDelegate?
其次,要在接收方AController中實現(xiàn)該代理和綁定該代理。從哪個方法跳轉(zhuǎn)到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 在集成銀聯(lián)sdk的時候,出現(xiàn)了問題。問題在于沒有按照人家給的sdk部署文檔去做,少配置了一個參數(shù)導(dǎo)致的。
在工程的Build Settings中找到Other Linker Flags中添加-ObjC宏
7 上午來單位后仔細閱讀了銀聯(lián)的SDK配置文件,將周日的那個bug給搞定了。原因就是因為沒有配置Other Linker Flags在工程的Build Settings中找到Other Linker Flags中添加-ObjC宏
8 側(cè)邊欄的滑動效果需要使用第三方的控件來進行處理。這里我們可以去github上面找一些第三方的控件來滿足我們的要求。KGFloatingDrawer
其中可能有一些地方是不太滿足我們的要求,因此需要我們對第三方控件進行調(diào)整。
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的緣故,針對這個問題,需要在創(chuàng)建一個view底層+imageView+textfield。
11 這個問題處理完以后,還有一個問題就是因為有多個輸入框的自動布局的bug,沒有辦法讓他們根據(jù)屏幕的寬度自動調(diào)整他們之間的間距,這里想到了一個辦法,就是將這個4個view底層在嵌入到一個大的view中去,這個可是讓4個view以這個大的view標準,然后這個大的view來去自適應(yīng)我們的屏幕寬度。
12 自定義ScrollView的概念,加入百度地圖SDK
13 利用Cocoapods加入第三方控件百度地圖SDK
,Alamofire
14 在使用百度地圖SDK的時候,沒有問題,但是引入時系統(tǒng)就報錯了
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 重新創(chuàng)建一個項目是可以通過Cocoapods導(dǎo)入百度地圖sdk的并且能夠正常顯示出來,那么問題來了就是因為在之前通過手動導(dǎo)入了一些銀聯(lián)的sdk包然后修改了里面的一些屬性信息導(dǎo)致了這樣的錯誤。
16 解決辦法我想重新從git上面下載我們的代碼,然后重新手動導(dǎo)入。