設計師如何用週末把 Swift 從不會到學會并做了一個 App

2017-11-14 04:27:56 +08:00
 cctrv

導言

起先,本來想用 React Native 做一個微信名片導入到錢包的 App。 某日重裝系統后,原來的 React Native 的環境怎麼裝都跑不起來原來寫的 App。 因此,我怒而轉向 Swift 陣型。

其實在 React Native 寫 UI 這過程很方便,但是接入 iOS 錢包這個過程,真的看到我一頭暮水。

新建項目

當然打開你的 Xcode,我建立了一個叫 Play 的項目。

選擇「 Single View App 」,下一步,不使用 Core Data。

入門

我覺得一切的語言,最重要還是莫過於。

print("...")

無論你想寫什麼命令,用 Print 一下就正解了。

我在網絡上找了一個庫,叫「 PlainPing 」

https://github.com/naptics/PlainPing

PlainPing.ping("www.google.com", withTimeout: 1.0, completionBlock: { (timeElapsed:Double?, error:Error?) in
    if let latency = timeElapsed {
        self.pingResultLabel.text = "latency (ms): \(latency)"
    }

    if let error = error {
        print("error: \(error.localizedDescription)")
    }
})

我突然間開始覺得,Swift 這個語言怎麼做起來跟 node 差不多,想要什麼功能?想網找一個庫回來。

所以,我就這樣子,入門了一個 Swift 面向 Google 的開發人員了。

開始嘗試寫一個 App

在開始寫一個 App 之前,我推薦使用 StoryBoard ( IB )作為 App 的 UI 編輯工具。

IB 的使用規則很簡單,核心就是一個「約束」概念。

IB 的入門課程我是看了這篇文章入門的(Auto Layout 入門教學 | 設計自適應介面 Adaptive UI)。

至於大家如何入門,我覺得 Google 多點就可以了。

我們當然可以先拖動一個空間到我們的 IB,再設定一下水平垂直居中。

接著,用我們的簡單代碼,來體驗一下第一次使用 IB 并可以運行的愉悅感。

按照上圖,我們使用在 IB 添加了一個叫 Label 的控件,接著,把界面切換成「 Assistant 」模式。

對著我們的 Label 控件右擊后拖動到左邊,建立一個 Outlet。

先這樣。


什麼是 Outlet 和 Action 呢?

其實,這裡就是一個綁定的過程。 在 Storyboard,我們做完的界面是不會和代碼綁定的。作為設計師的你,就理解為 Storyboard 就在另一個次元空間吧。 我們使用神之鼠標把控件給綁定到代碼之中,給代碼暴露了一個可以控制某個控件的接口,這裡,稱呼為 Outlet。 不過這個 Outlet 只能讀取和修改控件的一些樣式,文本內容。

如果遇到按鈕類的控件呢?我們就要用 Action 這個事情了。 在使用鼠標把控件拖動到代碼,選擇 Action,就會要求你新建一個 Function 了。這樣,你點一下那個控件的操作,就會由 Function 來完成了。 如果,你需要修改一個按鈕的名字,還是需要綁定上 Outlet 才可以。

簡單而言,Outlet 比較類似一個數據上的綁定。然而 Action 就是去觸發 Function。


我們繼續回來,原來的代碼。 我們這次,在添加一個 Action,使用剛才的辦法。 添加完 Action 后,我們就寫一個事情進來。

    @IBOutlet weak var PlayLabel: UILabel!
    @IBAction func doAction(_ sender: UIButton) {
        PlayLabel.text = "Hey"
    }

做完這些事情,我們就按下 Command (⌘)+ R 來在模擬器運行我們的 App。

我們就可以點一下「 Button 」,yo,我們的 Label 的文字就變成,Hey 了!

是很簡單的吧?

我們的入門課程就如此結束了。

設計師如何開發一個 Swift App ?

首先,我們要做一個設計圖。

接著,我們把設計圖的樣子,用 Xcode 的 IB 佈局出來。

放心,在 IB 的樣式不能完全反映 App 的最終樣子。 因為有部分樣式,我們只能使用代碼添加,不能使用 IB 完成。

接著,引入一大堆的庫和寫一大堆的代碼。


難點﹣UITableView

UITable 是整個佈局之中最難的第一個地方。
我從 下午 7 點折騰到凌晨 2 點才搞定這個 UITableView。
這裡分享兩個視頻,我是後期看了這兩個視頻才知道怎麼折騰。

Auto Resizing Table View Cell height in swift 3 and Xcode - YouTube

https://www.youtube.com/watch?v=6bQYd9N6g6A


最後,在真機運行 App 吧!

GitHub 項目位置

https://github.com/qoli/dailyVerse

項目應該快可以上架,我週末買了 Apple 開發者會員,可惜都週一過去了,還沒顯示通過會員。 這種 App 寫完了,但是開發者還沒下來真奇怪。哈哈哈

大家也可以透過這裡查看操作視頻: https://www.youtube.com/watch?v=Y4xG7LScOT8&feature=youtu.be

5060 次点击
所在节点    分享创造
29 条回复
GuangTsang
2017-11-15 13:18:08 +08:00
厉害了,我想要这种教学,一直想学
phk
2017-11-15 16:46:50 +08:00
给你打 call !!
noli
2017-11-15 17:37:57 +08:00
@cctrv

告诉 Apple 审核“我是女生,我从学 swift 到完成 app 才 3 天,我这中开发者还需要审核吗!!!?”

表情要骄傲自豪,然后库克就会拜访你了。

因为楼主你简直就是 Apple 梦寐以求的深度用户(开发者 mix 设计者)。
hanangellove
2017-11-16 09:28:23 +08:00
楼主可以试试 swift4 的 codable 协议,可以完全不用 swiftJson 了。
hanangellove
2017-11-16 09:28:53 +08:00
另外,楼主 App UI 设计的还不错。
jhdss
2017-12-05 11:30:47 +08:00
厉害了 我的小姐姐
nannanziyu
2017-12-06 09:19:18 +08:00
@hanangellove
codable 是个残次品
1, 继承无效
2, 不能设置默认值
cctrv
2018-01-20 05:53:49 +08:00
終於上架了……
cctrv
2018-01-20 05:54:11 +08:00
@hanangellove
SwiftJSON 超級好用~ 我不想換別的了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/406141

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX