今天的 Session 將主要將四件事情:swift
##Adaptivity 自從 Apple 推出了更大屏幕的 iPad 以後,開發者在屏幕的適配上,將會花費更多的時間。安全
Apple Pencil 、Smart Keyboard 等新的硬件,在你的 App 中使用後,也可以增長更多的亮點。網絡
在以前,能夠經過 Size Class 來進行屏幕的自適應,好比 iPhone 是 compact,iPad 是 regular。如今有了新的 iPad Pro,固然不會是新增一種類型,由於在 Framework 中有不少的工具來表示這種屏幕尺寸。Apple 在 SizeClass 中增長了新的特性來支持各類設備的適配。session
另外,iPad Air 2 和 Pro 可以每秒掃描屏幕 120 次,這遠遠大於屏幕上內容的刷新頻率。開發者可使用有關 Apple Pencil 、3D Touch 等 API 來作出更棒的 App。app
在 Swift 3 中,不少 API 都進行了重寫,所以在使用 Swift Coding 時將會有更好的體驗。好比新的字體,WhiteColor 和 blackColor 簡化爲 white 和 black,以及與 Core Graphics 相關的一些 API,都作了簡化。框架
GCD,如今是一個完整的對象,以前使用 GCD 建立自定義隊列並加入 task 是這樣子:async
let queue = dispatch_queue_create("com.example.queue, nil")
dispatch_async(queue) {
// ...
}
複製代碼
Swift 3 中是醬紫:函數
let queue = DispatchQueue(label: "com.example.queue")
queue.async {
// ...
}
複製代碼
這種寫法簡直爽的不行,特別簡潔明瞭。工具
另外,增長了一個新的特性特別棒,在建立自定義 queue 時,可使用 autoReleasePool 將 work item 包裝起來,寫法很簡單:佈局
let q = DispatchQueue(label: "com.example.queue", attributes: [.autoreleaseWorkItem])
複製代碼
有關 GCD 的其餘內容能夠去看單獨的 GCD session。
在 Foundation 框架中,也有不少新的提高,好比 Units 和 measurements ,以及新的 DateFormatter:NSISO8601.
增長了 NSDateInterval ,這些計量和單元的內容能夠觀看另外一個 Session 來詳細瞭解。
在 WWDC 中提到過,如今剪貼板能夠跨設備使用,可是須要注意的是,若是剪貼板的內容很大時,那麼在粘貼時可能會觸發一個 loading 動畫。
爲了不產生這個動畫,能夠在粘貼前先作一次檢查,Apple 提供了這些 API:
public class UIPasteboard : NSObject {
public var hasStrings: Bool { get }
public var hasURLs: Bool { get }
public var hasImages: Bool { get }
public var hasColors: Bool { get }
複製代碼
在粘貼以前,能夠先檢查下粘貼板中是否有本身須要的內容,避免 loading 動畫。
一樣,你也能夠控制向剪貼板發佈哪些內容,在將內容發佈到剪貼板前,能夠設置過時時間,也能夠限制只能用在當前設備。
在 iMac 5K 和 iPad Pro 9.7 上,可表示的顏色將更多。
在 iOS 和 MacOS 上,已經暴露了一些顏色的 API,可使用更加寬廣的色域。
這裏的提高,主要會體如今生產創造上。
Apple 並無由於 iMac 5K 和 iPad Pro 9.7 支持 pRGB 來增長新的類,只須要使用這兩個 API 就行了:
public class UIColor : NSObject {
public init(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)
public init(displayP3Red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)
複製代碼
在以前,咱們通常是建立一個 image 上下文,而後作一些自定義的繪圖操做,接着獲取上下文中的圖像內容,而後結束這個上下文,這樣子就能獲取到圖片了,其實這是一種常見的錯誤方法,由於這麼作的話,圖片將只有 32 bit 的 sRGB 。
這不是一個很好的 API,既沒有 block ,也不能進行拓展。
以前是醬紫:
func createDrawing(size: CGSize) -> UIImage {
let renderer = UIGraphicsBeginImageContext(size)
// Do your drawing here
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
複製代碼
可是如今,Apple 新增了類 UIGraphicsRenderer
,它是 block-based、full-color-managed,而且是能夠拓展的,能夠作位 image 和 PDF 的子類。而且管理 context 的生命週期,所以能夠作一些內存優化。
下面給出正確的使用方式:
func createDrawing(size: CGSize) -> UIImage {
let renderer = UIGraphicsImageRenderer(size: size)
return renderer.image { rendererContext in
} }
複製代碼
由於我對圖像色域這塊不是很瞭解,這裏大概講的就是可使用更寬色域的圖片,而且在支持顯示的設備上選擇高色域的顯示,不支持的設備上仍然使用普通的進行顯示,這與 App Thing 沒有衝突,是完美結合的。
而且這種選擇也是自動的,比如 @2x @3x 圖片的選擇。
Accessibility是Apple很早以前構建的一個框架,它能幫助一些行動不便的用戶來更好地使用你的應用。它爲你的UI提供了豐富的語義數據,這能讓不一樣的Accessibility功能給行動不便的用戶展示你的應用。
iOS 10 在這裏也提高了體驗。
語音朗讀推出了更加簡潔的 API,能夠實時朗讀,也能夠自定義音頻文件或者在線的音頻流。
文本輸入是 App 中最多見的場景,如今能夠爲文本輸入增長一個類型信息,好比位置、電話、郵件、信用卡和數字等,這樣系統就可以提供更加智能的輸入建議。
在 iOS 7 中增長了動態類型,可使得文本的大小更隨系統設置而改變,如今這個特性在 iOS 10 有了提高。
iOS 10 對於 UITabBar 的自定義給出了官方的 API,在以前,若是咱們須要一個個性的 tabBar,那麼就須要作不少工做,如今簡單多了:
tabBarItem.badgeColor = UIColor.white()
badgeTextAttributes = [ NSForegroundColorAttributeName : UIColor.blue(),
NSFontAttributeName : UIFont.italicSystemFont(ofSize: 12) ] tabBarItem.setBadgeTextAttributes(textAttributes: badgeTextAttributes,
forState: UIControlStateNormal)
tabBar.unselectedTintColor = UIColor.brown()
複製代碼
WKWebView 新增了 delegate 方法,做爲 3D touch 的支持。
新增類 UIPreviewInteraction
,這意味着,3D touch 的支持可使用自定義的動畫。
另外還有一個小亮點就是 UIRefreshControl 支持自定義的 UIViewController 了。
在 iOS 9,爲 collectionView 的流式佈局(Flow Layout)增長了 automatic self-sizing cell,可是這須要你計算一個大概的 size。
如今爲 Flow Layout 增長了新的模式,你將不在須要返回一個估算的 size。
CollectView 並還將支持分頁,以前這個功能是 ScrollView 纔有的。
Apple 還特別的從新設計了底層,使得 collectionView 可以更加平滑的滑動。假如你如今的 collectionView 每行有三個 cell,那麼在快滑動到下一行時,將會一次性建立 3 個 cell,再假如每個 cell 都比較複雜而且耗費比較多的時間時,那麼將會有卡頓。
Apple 這裏提供了一個叫作 (單元格預讀)cell prefetching 的技術,也就是說,你的 cell 還不須要顯示在屏幕上時,可能系統會調用 data source 方法來跟你要這個 cell。
cell prefetching 技術是 iOS 10 底層實現的,因此咱們無需關注和修改,將會自動得到這項技術的支持,可能還有一些須要注意的地方就是,你須要保證你的 cellForxxx
方法,無論系統在何時調用,它都能返回正確的 cell。
Apple 不但爲 cell 作了預處理,還對數據的獲取也增長了預處理的 delegate 方法,這樣子,咱們就可以在 cell 顯示以前,作一些網絡加載、硬盤數據讀取等工做,大大提升了性能。而且 Data PreFetching 並非 collectionView 特有,TableView 也加入了支持。
動畫這塊也加入了更新,新的動畫 API 支持動畫的中斷、取消、反向等等,動畫時間函數也增長了更多的類型。
新的動畫將比如電影,你能夠快進一段時間、倒退一段時間、暫停、取消、反向播放等。
用法也很簡單:
// 建立動畫時間函數
let timing = UICubicTimingParameters(animationCurve: .easeInOut)
// 建立動畫
let animator = UIViewPropertyAnimator(duration: duration, timingParameters: timing)
// 添加動畫塊
animator.addAnimations {
self.squareView.center = CGPoint(x: point.x, y: point.y)
}
// 執行動畫
animator.startAnimation()
複製代碼
能夠看到,新的 API 特別簡潔明瞭。
經過這種新的 API,咱們能夠將動畫和手勢控制合成在一塊兒,建立出更加 excited 的視覺交互!!!
在以前,假如咱們經過一個 url 須要跳轉到微博,那麼首先得經過 url 跳轉到 Safari,接着若是安裝了 weibo,那麼就能夠跳轉過去,若是沒有,就停留在 Safari。
咱們都是很不但願,一個操做須要在 App 外面操做或者迫使用戶離開 App。
新的 API 解決了這個問題,在跳轉前能夠判斷系統是否安裝微博,若是有就直接跳過去,沒有的話就在 App 內部打開網頁。
UIApplication.shared().
open(url, options: [UIApplicationOpenURLOptionUniversalLinksOnly: true]) {
(didOpen: Bool) in
if !didOpen {
// 沒有安裝 App,作本身的操做
} }
複製代碼
對 query generation 作了優化,簡化了 CoreData 代碼(再怎麼簡化也很難用 Orz…)。
另外一個優化的地方是鏈接池(Connection Pool),如今 CoreData 能夠提供多個 Reader,一個 writer。這將會帶來更多的性能提高。
支持存儲公共文檔:Public databases。
支持每一個人一個庫(per user database),這將使得應用可以支持多用戶。
數據共享:經過新的 UICloudSharingController 類進行管理。
咱們知道,Handoff 是經過 User Activity
這個獨立的信息集合單位,不依賴於其餘進行傳輸的,iOS 10 增長了用戶地理位置。
這樣子,咱們就能夠在 handoff 中增長更多更棒的特性了。
iOS 9 加入了應用內搜索,可是在 iOS 10 對此功能作了提高,當用戶在系統的 search 中找到了查詢結果後,能夠點擊 App 圖標中的 search in app,接着進入 App 持續查找。
這個新功能能夠經過很簡單的方式就可以集成到 App 中。
Apple Pay 在 Web 和 Extensions 中也支持啦。
這意味着 SFSafariViewController 也支持了。
在 iMessage 中也能輕鬆集成。
widgets 如今有了兩種形式,compact 和 expanded 。
能夠很方便的在這兩種形式上顯示不一樣的內容。
media attachment:通知可以附加媒體信息。
end to end encryption:通知數據端到端的編碼,這樣子能夠增長安全性。
embedded UI views:在通知中嵌入 UIView ,想一想是否是很激動,打完 Uber,而後車到了,同時在通知中給出司機的位置圖片;收到快件正在配送的通知,同時顯示快遞員的照片。不由再吼一聲 excited!
callKit 增長了不少 VOIP 方面的特性,不過這個東西明顯是動了天朝運營商的奶酪,之後的發展狀況也不知道如何。
Siri 如今變的更加智能,可以根據上下文、語義等理解你的要求,這是很複雜的工做,雖然 Siri 在英語環境中確實很棒,可是到了天朝畢竟仍是有些水土不服,中文但是博大精深啊!就問 Cook 你怕不怕。
Siri 如今支持第三方的 App 拓展,SiriKit 提供了一些語義化的組件,可以讓用戶經過 Siri 調用你的 App。
好比你設置了「記帳」、「類型」、「多少錢」,若是用戶呼叫 Siri:「我須要記帳,我剛纔吃午餐花了 20 塊錢」。
那麼 Siri 就會命中你的設置,而後打開你的 App。
滴滴打車的 Siri 支持也是這種類型。
iMessage 作了很大的更新,具體的能夠看有關 iMessage 相關的 session。