💻 iPlayground 2020

Princekili
4 min readFeb 13, 2021

iPlayground 是台灣第一個也是目前唯一「聚焦於 Apple 相關軟體開發的大型技術研討會」

還記得當初聽 weak self 得知 iPlayground 時,就暗自決定要搶票了!

這場由一群專業又熱血の前輩們舉辦的研討會,不藏私地分享開發路上採坑的經驗,確實令我感到印象深刻啊~
藉由一些小細節也看得出主辦團隊的用心,像是大家可以在 App Store 下載 iPlayground 2020 來看議程,在現場使用時真的方便許多!

👇 以下簡單介紹印象特別深刻的 Keynote 講座

為什麼 App 卡卡的?

講者是 John Lin a.k.a. Swift Taipei 主辦人,有人機介面的研究背景,說話風格蠻詼諧有趣~

一個好 App 的條件

  • 符合商業需求
  • 用起來順手
  • 漂亮的程式碼 (Optional)

什麼是順手?

  • 外觀漂亮
  • 沒有反人類的操作流程
  • 行為符合使用者預期
    → 使用者的輸入要有適當的回饋
    → 力回饋 (e.g. 機械鍵盤、iPhone 7/8 上的 Home 鍵)
    → 視覺回饋 (e.g. 點擊後的回饋、選擇後的變色、顯示額外的內容)

什麼是卡卡的?

  • 老闆說卡卡的 XD
  • 畫面不連續
    畫面的更新頻率低於 76Hz
    → 人眼可以看到 76 Hz 的閃爍
    → 真實世界的物體的移動是連續的
    → 在顯示物體移動時,如果人眼能夠發現中間有被跳過的畫面,就會覺得卡卡的。
  • 輸入到視覺回饋的時間差太長
    點擊超過 69 ms 沒有回饋
    滑動超過 11 ms 沒有回饋
    → 人對於點擊和拖拉滑動有不同的容忍度
    → 真實世界的物體受力後會立刻移動,沒有任何時間差。
    → 使用者操作後過了太久才產生視覺回饋的話,就會覺得卡卡的。

App 卡卡的原因

  • Run loop 的一個 loop 跑了太久 → 拖到了下一個 loop
  • 沒辦法更新畫面
  • 沒辦法接收輸入

App 卡卡的處理方法

  • 使用快取 → 縮短運算時間
    - UIImage Cached → init(named:)
    - Not Cached → init(contentsOfFile:)
  • 重複使用 View/Cell
    - UICollectionView → dequeueReusableCell(withReuseIdentifier:for:)
    - MKMapView → dequeueReusableAnnotationView(withIdentifier:)
  • 好好利用多核心處理器
    - 只要把事情分散到各個核心就可以縮短 run loop 處理時間
    - iPhone 12 上有 6 個 CPU 核心可以同時執行多個執行緒
    - 使用 GCD、Combine 來把事情移到 run loop 外執行

後記

這次參與了許多精彩的講座,收穫滿滿 👍👍👍
但個人覺得比較惋惜的部分是研討會只有一天,全部的 sessions 和 unconferences 都是三軌並行,造成大家的選擇困難啊啊啊!

不過當下沒跟到的講座現在也可以上 YouTube 看了 👍

推薦連結

--

--