學 Swift 也有一段時間了,做了一些小的 demo,有興趣的可以看我的 100 Days of Swift 。一直想做個完整的項目,發(fā)現(xiàn)這邊學校的外賣訂餐也逐漸流行起來,不像中國有那么多強大的外賣軟件,美國也有,但不多,起碼中國人對那些軟件都不太熟知也不怎么用。打算專門針對午餐的外賣做個app,做了幾天,只做出個 UI,看上去很小的軟件,新手做起來感覺東西還是有點多。 Swift 如何與后端交互 之類的之后再慢慢學吧,有大神愿意在評論區(qū)給幾個教程就更好了。數(shù)據(jù)庫之類的我都挺熟悉,SQL 或者 MongoDB。
BTW, 想了解 MongoDB 的可以看我的這兩篇文章- Part 1 , Part 2 ,我之前做了個完整的網(wǎng)站 demo,前后端都實現(xiàn)了,建于 Heroku ,感覺挺酷的。
目錄
在這個 app 中,所有 UI 都是用代碼創(chuàng)建的,你可以在 100 Days of Swift 看到,我之前練習的時候都是用的 storyboard,但是到了10頁以上感覺 storyboard 就開始有點亂了,特別是那些 segue 的線牽得滿屏幕都是的時候。之后我就開始用 SnapKit 做 UI 了,雖然比起 CSS 來,還是有點不方便,但用起來感覺還行。下面我大概羅列了一些實現(xiàn)的基本功能:
引導頁
午餐菜單(tableView)
購物車,動畫
下拉刷新
自定義個人主頁 (collectionView)
Reminder 和 Setting 需要后臺,就用了 Alert 來簡單響應了
全屏右滑退出
具體代碼請看我的 Github , 下面我就主要展示一下效果,稍微講一下實現(xiàn)過程,代碼中已有很多注釋。
引導頁

引導頁我是用 collectionView 做的,剛開始先判斷要不要進入引導頁,如果版本更新,則進入。collectionView 滑動方向設置為 .horizontal ,設置任意數(shù)量的頁數(shù)。添加一個啟動的 startButton ,設置前幾頁都為 startButton.isHidden = true,最后一頁的時候顯示出來,再添加一個漸出的顯示動畫。
菜單和購物車

shoppingCart
菜單可以下拉刷新,本打算自定義下拉刷新,就像 ALin 的項目中那樣,但是好像有點問題,我就用了自帶的 UIRefreshControl ,下拉的時候顯示刷新的時間,稍微調(diào)整了下時間的 format。代碼很簡單
let dateString = DateFormatter.localizedString(from: NSDate() as Date, dateStyle: .medium, timeStyle: .short)
self.refreshControl.attributedTitle = NSAttributedString(string: "Last updated alt="" width="270" height="480" border="1" />
profile
本來打算做成簡書那樣,但是。。作為新手感覺還是有點難度。也是因為我這 app 里沒有必要實現(xiàn)那些,就沒仔細研究。
如前面提到的這頁用的 collectionView,兩個 section,一個是 UserCollectionViewCell , 下面是 HistoryCollectionViewCell 。 下面這個 section 像一個 table 的 section,有一個會自動懸浮的 header,這 header 用的是 ALin 大神的輪子, LevitateHeaderFlowLayout() ,當然這個文件的 copyright 是用他的名字的。
class CollectionViewFlowLayout: LevitateHeaderFlowLayout {
override func prepare() {
super.prepare()
collectionView?.alwaysBounceVertical = true
scrollDirection = .vertical
minimumLineSpacing = 5
minimumInteritemSpacing = 0
}
}
這項目總體來說應該算很小的,如果后端也實現(xiàn)了,也算一個蠻完整的小項目了吧。