WWDC 201 What's new in cocoa touch

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

  • Productivity
  • UI refinements
  • API enhancement

Productivity

Drag and drop

這是今年的重頭戲,很是強大。你能夠在 照片 app 中選擇多張圖,而後拖入 email.app,他就成了 email 的附件。api

蘋果爲了開發者能作好這方面的開發,準備了四講 Sessionxcode

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

  • Drop

  • Drag

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

File ManageMent

因爲 iOS 11 蘋果給了一個新的 app —— files。app

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

這個東西看起來不起眼,然而他具備高度的可定製性;能夠訪問本地文件或者雲盤文件.佈局

具體詳細介紹,見:字體

UI Refinements

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

NavigationBar 的 title 支持了大字模式。

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

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

能夠看最上面那張效果圖裏的 Message 的 navigaitonbar,它內置了搜索框。咱們經過這樣的代碼也能夠啓用它:

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

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

因而乎坑爹的地方開始了:

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

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

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

對應的代碼是這樣的:

而後蘋果自豪的說,UIScrollview 能幫你自動完成不少適配問題。你甚至不須要寫一行代碼。

固然不能 100% 保證,若是你想本身 handle。你能夠經過修改這些 API:

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

因此我我的以爲,不要對這個 api 抱有太大但願。

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

TableView

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

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

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 也變得安全了。

  • block-based KVO

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

代碼比之前簡潔太多了。

UIKit

  • preferredScreenEdgesDeferringSystemGestures() -> UIRectEdge

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

  • AutoLayout and ScrollView

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

  • dynamic type

在過去,若是咱們想支持大字模式的話。咱們須要用 UIFont 的 preferredFont Api,然而國內開發者們不多用。由於咱們設計師用的蘭亭細黑之類的,特殊字體。

新的 API 就愉快多了:

甚至能夠這樣:

因而 Autolayout 也添加了相關的功能,畢竟佈局是總體的,當字號跟着變大了,行距之類的都要進行調整。

這個 feature 一樣適用於 VFL 和 UIStackView

Password autofill

強行借鑑 1Password

Asset Catalogs

  • 能夠用命名 color 了,好比直接 themeColor,而不用更像以前那樣須要本身寫 Enum
  • PDF 的圖片能夠根據 dynamicType 進行縮放
  • Tabbar 在大字模式下 會有按住顯示 tabbar 內容的 feature。若是你用了 PDF 的圖片,體驗會好不少。

ProMotion 刷新率

由於 iPad Pro 120FPS,因此 UIScreen 提供了獲取設備最大的刷新率的 API。咱們能夠根據本身的 app,動態調整刷新率。

相關文章
相關標籤/搜索