這是自學iOS以后開的第一個稍微完整一點的項目,也是最早(階段性)完成的。但是還不夠完整,有一些設想的模塊還沒做,不過把最主要的功能完成了,UI部分就是照著SnapChat寫的,盡量做到一致吧,但是其實還是有一些細節沒做到。因為第一次寫,中間掉了挺多次坑,也有大面積推倒重來的時候,不過總體還是寫得很開心,我就是喜歡這種長得很可愛的App呀*-*
后臺數據管理
后臺采用的Parse.com,真的好好用!而且guide寫得超級好,連界面都模仿的蘋果的風格,行文清晰易懂。
User類型采用的是Parse的自帶類PFUser,它提供了很方便的SignUp和LogIn方法,還是異步的。
Message類是自定義的PFObject,表示的是每一條消息,里面還存了發送者、接收者、時間、未讀等信息。
然后我還建了個Conversation類,也是PFObject,保存的是一個對話。因為登錄以后第一個界面顯示的是當前所有存在對話的聯系人的名字,這個類就是為了便于顯示這個列表而創建的。一開始沒有創建這個類,采用查詢所有后臺存的Message來找到和登錄用戶有關的對話的方法,實在有效率問題。而且這個列表界面更新還挺經常的,比如新建一個對話,比如有信息已讀后被自動刪除了,比如有新的信息到達,這個界面都需要更新,?如果不考慮效率就會比較慢。最后我的解決辦法就是創建這樣一個類,維護和查詢這個類的列表比查詢所有Message快很多。但是其實還是不能算得上scalable的,畢竟現在用戶太少,Conversation的數量級在n^2。不知道微信這樣的應用是怎么做的?
功能實現
閱后即焚的功能是通過一個定時器,到了時間以后,直接在后臺把相關的Message刪除而實現的。后臺刪除以后,界面只需要刷新數據就可以看到閱后即焚的效果了。gif里展示的有點快,留意一下可以看到,在打開聊天界面以后,輸入的過程中,原來顯示的消息會后來變不見了,這就是消息已讀以后就會定時被刪除的原因。
對話列表和聊天界面的信息都是向后臺發PFQuery請求拿到的,然后展示在頁面上,需要的時候刷新。所有的請求都是異步的,請求完成后回到主線程刷新界面。我感覺整個界面還是蠻流暢的。
UI界面
SnapChat的界面不算復雜,但是風格比較活潑,有很多小細節做的很精致細膩,比如界面間的切換動畫,一些小元素的動畫等。
寫UI的過程踩了很多坑,一直在邊踩邊查,邊查邊踩…對話列表和聊天界面寫的比較順利,就是一直在自定義各種cell和view,鍵盤事件處理的場景還比較簡單。聊天界面采用的是一個ChatViewController嵌套兩個內部controller(MessageTableViewController,InputBoxController)來寫,這樣消息展示和鍵盤輸入都有專門的控制器來處理,頂層的控制器負責和后臺交互以及刷新數據等邏輯。
添加好友和已有好友部分做的是很簡單的處理,就直接在tableview上打勾來添加了…然后做了一個searchBar和右邊的字母索引。
主要框架搭起來以后開始添加一些細節,比如對話列表的背景,自定義了萌萌的下拉刷新。最后是手勢的交互,之前全是按照navigationController的默認行為實現的,其實原app實現得非常靈活,有在大界面左右滑動來切換,也有在cell上滑動來切換,切換的時候還會有點小細節動畫。寫這部分的時候卡了挺多次,最后寫了自定義segue,自定義了一個可以右滑出底層背景并做跳轉的cell。寫的時候被手勢打架折騰了很久...
To-do List
嗯還有很多模塊沒完成呢?,F在只是階段性總結。
一個是照相模塊沒有做,SnapChat的相機很可愛的!只是當時一看就有點蒙圈沒什么思路,所以就先往后放了。
然后就是加好友的模塊,做的太簡單了,應該有個好友驗證系統,這個怎么用Parse實現還要想一想,有一點小思路但是一直沒有時間寫。
還有很多可愛的小動畫,包括一些我已經實現的,感覺還是在照虎畫貓的程度,細膩的感覺還差很多。