WWDC 201 What's new in cocoa touch

糖炒小蝦_txx發表於2017-06-18

這是每年必看的一個 session,基本上是 iOS 的 API 更新的總章,會告訴你都有哪幾個點的 feature。今年也不例外,蘋果的著眼點是:

  • Productivity
  • UI refinements
  • API enhancement

Productivity

Drag and drop

這是今年的重頭戲,非常強大。你可以在 照片 app 中選擇多張圖,然後拖入 email.app,他就成了 email 的附件。

蘋果為了開發者能做好這方面的開發,準備了四講 Session

WWDC 201 What's new in cocoa touch

這裡蘋果也沒展開具體說 API 怎麼用,只是列了一下讓一個 customView 支援 drag 和 drop 分別要實現什麼。

  • Drop

WWDC 201 What's new in cocoa touch

  • Drag

WWDC 201 What's new in cocoa touch

我這裡也就不展開去寫 demo 了,等後面四個 session 一起來玩一下這個 API。

File ManageMent

由於 iOS 11 蘋果給了一個新的 app —— files。

蘋果很大方的把 files 的 view controller 拿出來給大夥兒用。

WWDC 201 What's new in cocoa touch

這個東西看起來不起眼,然而他具有高度的可定製性;可以訪問本地檔案或者雲盤檔案.

具體詳細介紹,見:

WWDC 201 What's new in cocoa touch

UI Refinements

iOS 11 在 UIKit 上最明顯的變化就是 WinPhone 樣子的 NavigationBar 了。

WWDC 201 What's new in cocoa touch

NavigationBar 的 title 支援了大字模式。

再滾上去之後,就又會變成我們熟悉的 title

WWDC 201 What's new in cocoa touch

而開啟大字模式,僅需這兩個 API

WWDC 201 What's new in cocoa touch

可以看最上面那張效果圖裡的 Message 的 navigaitonbar,它內建了搜尋框。我們通過這樣的程式碼也可以啟用它:

WWDC 201 What's new in cocoa touch

然後,蘋果居然把 RefreshControl 也坐進去了。。。

WWDC 201 What's new in cocoa touch

蘋果據說這個 feature 你若是用了 大字模式 + UIRefreshControl。這個是自動實現的。

於是乎坑爹的地方開始了:

WWDC 201 What's new in cocoa touch

這個東西是 NavigationBar......高度變了,變厚了好多。於是我們當初若誰圖省事用 44 來拿高度的,全都會掛出去。

蘋果給了一個新的 API,來標記這塊可變區域

WWDC 201 What's new in cocoa touch

SafeAreaInsets,也不知道誰想出來的名字。

對應的程式碼是這樣的:

WWDC 201 What's new in cocoa touch

然後蘋果自豪的說,UIScrollview 能幫你自動完成很多適配問題。你甚至不需要寫一行程式碼。

當然不能 100% 保證,如果你想自己 handle。你可以通過修改這些 API:

WWDC 201 What's new in cocoa touch

長成這模樣的 API 大家應該很熟悉吧。當初 iOS 7 開始變成全屏模式之後,也有個類似的東西。用不好就會 app 上面頂出來 64px 的空白區域。

所以我個人覺得,不要對這個 api 抱有太大希望。

以及事實上確實如此,我成功用 xcode 9 把禮物說跑起來了,相容性問題出現最大的地方就是 navigationbar 的行為問題。

TableView

TableView 的修改,可以參考 Mail App,多加了一些 Cell 的側滑手勢:

WWDC 201 What's new in cocoa touch

實現起來蠻容易的,且 UIKit 自動幫你完成很多事情:

WWDC 201 What's new in cocoa touch

API enhancement

Swift4 And Foundation

  • Codable protocol

這個東西還是蠻強大的,你只需要在 enum/struct/class 上實現 codable 這個協議,預設的 protocol extension 就能幫你完成 NSCoding/JSON/Plist 的序列化與反序列化。

但事實上吧...並沒有那麼智慧,他有點像 Android 的 Gson 庫。僅支援 key 和 property 一一對應。如果不對應的話,還是要手動實現的。

不過怎麼說還是比原來用 SwiftyJSON 實現起來優雅多了。

  • KeyPath

蘋果越發的讓程式碼變得更安全,在 OC 的歷史包袱上,我們知道 selector、valueForKeyPath 之類的東西全都是用字串來描述的。

這類東西沒有補全,寫起來很容易出問題。Swift 3 攻克了 Selector 的問題,Swift 4 讓 KeyPath 也變得安全了。

WWDC 201 What's new in cocoa touch

  • block-based KVO

既然 KeyPath 被翻新了,蘋果就順路把 KVO 也收拾了

WWDC 201 What's new in cocoa touch

程式碼比以前簡潔太多了。

UIKit

  • preferredScreenEdgesDeferringSystemGestures() -> UIRectEdge

UIViewController 的一個 method,用來 defer 系統的各種手勢,例如上邊緣下滑喚出 notificationCenter,提升使用者體驗。

  • AutoLayout and ScrollView

ScrollView 新增了兩個 layoutGuide:ContentLayoutGuide 和 frameLayoutGuide 來幫助我們解決 ScrollView 上加 Autolayout 的問題,真是激動人心,然而我們國內開發者沒法用

  • dynamic type

在過去,如果我們想支援大字模式的話。我們需要用 UIFont 的 preferredFont Api,然而國內開發者們很少用。因為我們設計師用的蘭亭細黑之類的,特殊字型。

新的 API 就愉快多了:

WWDC 201 What's new in cocoa touch

甚至可以這樣:

WWDC 201 What's new in cocoa touch

於是 Autolayout 也新增了相關的功能,畢竟佈局是整體的,當字號跟著變大了,行距之類的都要進行調整。

WWDC 201 What's new in cocoa touch

這個 feature 同樣適用於 VFL 和 UIStackView

WWDC 201 What's new in cocoa touch

Password autofill

強行借鑑 1Password

WWDC 201 What's new in cocoa touch

Asset Catalogs

  • 可以用命名 color 了,比如直接 themeColor,而不用更像之前那樣需要自己寫 Enum
  • PDF 的圖片可以根據 dynamicType 進行縮放
  • Tabbar 在大字模式下 會有按住顯示 tabbar 內容的 feature。如果你用了 PDF 的圖片,體驗會好很多。

WWDC 201 What's new in cocoa touch

ProMotion 重新整理率

因為 iPad Pro 120FPS,所以 UIScreen 提供了獲取裝置最大的重新整理率的 API。我們可以根據自己的 app,動態調整重新整理率。

相關文章