8 分鐘閱讀

第 12 週開發日誌(iOS 第四週)

學習 Apple Human Interface Guidelines、Lottie 動畫與 DispatchQueue 多執行緒概念。

1. iOS 領域課程

Human Interface

直翻就是人機介面,雖然已經偏向 UI/UX 的設計,但既然是學習 Apple 封閉的生態系,就要遵守 Apple 的 App 風格設計規範,不然做出來可能連上架都無法。

我自己是電商客服轉職過來,電商平台 App 的操作反饋從來沒少過。在資訊時代出生的我們,稍微熟悉一下各家些微不同的操作方式都不是問題,但有些不見得是老年人,也會抱怨操作不直覺(最好會讀心,然後全自動 Zzz)。其實每個人對於按鈕位置應該在哪,以及按下去有哪些反饋的預設立場都還是不同,因為每個人常用的 App 不同,就會以之前操作經驗去預設。

所以 Apple 將生態系內的 App 訂定同一個規範,也能讓 Apple 產品使用者體驗中都能「直覺上的順暢」。

Apple Human Interface Guidelines

Lottie

Lottie 是個第三方套件,可以讓我們輕鬆將動畫檔案插入程式碼控制播放與顯示。

  • Lottie 上也有已經設計好的動畫,下載後存入 Xcode。
  • 簡單程式碼即可操作動畫:
class="highlight">
1
2
3
4
5
6
// 設定 animationView(Lottie)
let lottieAnimation = Animation.named("84848-polar-bear")
myLottie.animation = lottieAnimation
myLottie.loopMode = .loop
myLottie.animationSpeed = 1.0
myLottie.contentMode = .scaleAspectFit

DispatchQueue

多執行緒被告知是對工程師來講最難過的坎其中一項。看完整週教學簡報跟影片,在細部上的差異真的很難去釐清。看了幾篇文章,先節錄部分講解清楚的部分,再附上自己的想法先記錄下來。

Concurrency、Asynchronous、Parallelism 是什麼?

Process 之下其他 Thread 之間是怎麼安排「執行任務的順序」?

Concurrency:

  • CPU 會在 Thread 或 Process 之間切來切去。
  • 因此,Concurrency 表示任務進入 Thread 內的順序等於開始執行的順序,但不一定等於任務的結束順序。也就是說,Concurrency 代表的是同時「處理」多個任務。要注意,是同時「處理」多個任務,不是同時「執行」多個任務;同時執行多個任務的是 Parallelism。

Serial:

  • 而 Serial 相反,Thread Blocking 的時候,CPU 會繼續在那邊等待,直到任務返回結果。因此在 Serial 的情況下,任務進入 Thread 內的順序等於開始執行的順序,也等於任務的結束順序。

Asynchronous 和 Synchronous 探討的是 Process 上的 Thread 執行各個任務的開始執行時間點。

Synchronous:

  • 任務的類型是:在執行中,沒得到結果前不會返回結果。
  • Process 上的 Thread 內會有多個任務,在執行各任務的過程中,如果需要等待 A 任務完成並返回結果,才能繼續執行 B 任務,則叫做 Synchronous。

Asynchronous:

  • 任務的類型是:一旦被執行,就立即返回結果;接著在任務內的工作完成後,會再通知 Thread。
  • 如果不需要等待 A 任務完成並返回結果,就繼續下去執行 B 任務,則叫做 Asynchronous。也就是說 A 任務先開始執行,接著換 B 任務開始執行,但是 A 任務和 B 任務哪個先完成是不一定的。

在我的理解:處理與執行不同。處理就像工程發包,已發包工程(已處理),但沒工人做工(沒執行)。

  • Concurrency 會依照順序讓所有任務同時去處理(發包),但會先執行第一個(讓工人開始做工)。如果此工程沒材料在等的時候,讓同一批工人去下一個任務(下一個已發包工程)。都是同一個 Thread(同一批工人做工)。
  • Serial 就是處理一個任務並執行此任務,任務結束才去下一個任務;任務執行要等,就會一直等。都是同一個 Thread。

當 Concurrency 跟 Serial 再搭配上 Async 跟 Sync 時:

  • Concurrency 配 Async:同時處理任務(全部發包),每個任務都執行;多個 Thread(很多批工人)。
  • Concurrency 配 Sync:同時處理任務(全部發包),但只依順序執行任務,完成才去下一個;都是同一個 Thread,跟單獨只有 Concurrency 幾乎一樣。
  • Serial 配 Async:只依順序處理任務,也只依順序執行任務,但因為 Async 會馬上返回結果,所以任務會被依順序馬上被發包,且全部馬上返回結果(如果可以)。如需執行的(需要工人做工、需要計算),會依照順序執行;都是同一個 Thread。
  • Serial 配 Sync:只依順序處理任務,也只依順序執行任務,且要等執行完才會有返回結果;都是同一個 Thread,跟單獨只有 Serial 幾乎一樣。

2. 期末專題提案

和過往 App 產品分析不一樣的是,我們要自己想出一個目前尚未滿足的需求,設計解決方式,作為期末專題的作品。以下是我自己的提案,詳細請看 HackMD

  • 目標客群:
    • 經常使用咖啡廳為工作或讀書環境。
    • 視覺系。
    • 氣氛至上。
    • 喜歡嘗新,有多嘗試不同風格店家的習慣。
  • 解決什麼樣的需求:市面相關網站、地圖搜尋、App 都是以文字地圖、圖表、列表顯示為基礎,查詢店家環境風格照片的步驟麻煩。
  • 解決的方式:以圖片視覺為主的呈現方式(例如 Instagram、Pinterest)。