💻 iPlayground 2020
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 看了 👍