WWDC2017 筆記 - Cocoa Touch 中的新特性

劉小蠻發表於2017-06-12

這篇文章是 What’s New in Cocoa Touch / UIKit Session 201 的一些整理。【基於OC】
轉自我的 Blog: Danny's Dream

Drag Drop 新的互動方式 拖拽

Drag

需要 Drag 的物件要 add 一個 UIDragInteraction ,用法類似於 UIGestureRecognizer 。
UIDragInteraction 有一個 UIDragInteractionDelegate 的代理,可以提供資料,浮起的動畫,和自定義的拖動時的動畫。

Drop

接收 Drag 的物件的容器,容器要實現一個 UIDropInteractionDelegate 的代理,可以來根據拖入的物件調整當前的介面。

TableView, CollectionView, TextView, TextField, WebView 原生控制元件都支援

配合剪下板 UIPasteConfiguration 食用會更加。

這個功能手機上可以在 檔案 這個系統 app 中體驗,裡面的 tableview 和 collectionview 的 item 都是支援拖拽的。

File Manager

UIDocumentBrowserViewController

多了一個檔案管理的 VC,預設裡面會顯示當前 app 許可權以內的檔案,包括本地的和存在 iCloud 的【如果三方 app 在 info.plist 中宣告瞭 UISupportsDocumentBrowser 或者 UIFileSharingEnabled 和 LSSupportsOpeningDocumentsInPlace 的話,可以獲得第三方 app 的檔案】。

WWDC2017 筆記 - Cocoa Touch 中的新特性

構造方法如下【該構造還提供了檔案篩選的能力】:

UIDocumentBrowserViewController* view  = [[UIDocumentBrowserViewController alloc]
                                              initForOpeningFilesWithContentTypes:@[@".txt",@".pages",@".pdf"]];複製程式碼

值得注意的是官方文件中提到,在使用該 VC 時。

    1. 務必把檔案管理裡的 VC 作為應用的 根 VC,不要把它放在 navigation,tab 或者 split 檢視中,也不要通過模態的樣式展現出來。
      有上述需求的話用 UIDocumentPickerViewController 來替代。
    1. 由於檔案可能被任何 app 中的 UIDocumentBrowserViewController 修改,所以對檔案的操作儘量通過 UIDocument 子類 或者 NSFilePresenter 和 NSFileCoordinator 物件來操作。

新的 UINavigationBar

增加了大的標題欄【覺得並不好看啊】,新增的 api,控制後面的 vc 層級是否需要繼續展示大的 title,或者全部使用大的 title。可以在 Mail 的系統 app 中體驗這個特性。

   //宣告大標題
    self.navigationController.navigationBar.prefersLargeTitles = YES;
    //包含三種模式 aoto / always / never (後續 present 的view 是否需要大標題)
    self.navigationController.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeAutomatic;複製程式碼

增加了統一的 navigation 搜尋欄,不用再加在 tableview 的 header 中了。

 self.navigationController.navigationItem.searchController複製程式碼

現在 navigation bar 是獨立的,和你的 content vie 無關,為了更好的處理這些系統 view 的佈局的變化,提供了

  self.view.safeAreaLayoutGuide // auto layout
  self.view.safeAreaInsets // 程式碼佈局

- (void)viewSafeAreaInsetsDidChange{
  //當佈局變化的時候的回撥
}複製程式碼

UIScrollView

解決了 navigation vc 和 scrollview 的 contentInset 的衝突的問題,現在 navigation vc 不在修改 contentInset 了。
增加了 contentInsetAdjustmentBehavior 這個屬性,預設為 UIScrollViewContentInsetAdjustmentAutomatic ,可以用來自定義滑動時候的便宜效果。
通過 adjustedContentInset 可以獲取當前的偏移量。

TableView 的修改

  • 滑動操作
    Row 增加了 UISwipeActionsConfiguration ,用來處理滑動操作。
    UISwipeActionsConfiguration 通過 UIContextualAction 陣列來初始化,可以配置不同的動作,左滑右滑等,還能配置 UISwipeActionsConfiguration 的 performsFirstActionWithFullSwipe 【Bool】屬性 來決定第一個事件是否響應完整的滑動。

  • 新的分界線
    可以配置相對值和絕對值的 Inset

    self.tableView.separatorInsetReference = UITableViewSeparatorInsetFromAutomaticInsets;複製程式碼

Swift 4 和 Foundation 的更新

這裡是 OC 版的,我就不展開了,KeyPath 的新型別,還增加了 block 的 KVO 【然鵝 OC 並沒有】。

系統級別的手勢事件控制

AutoLayout 和 Scroll View

class UIScrollView { var contentLayoutGuide: UILayoutGuide { get } var frameLayoutGuide: UILayoutGuide { get }}

動態型別

用於系統級別的調整大小,獲取動態的字型的大小。設計到 Auto Layout 的相關更新。

密碼自動填寫功能

場景是在 web 上登入賬戶之後,點選下線 app ,然後調整 appstore,開啟 app ,輸入密碼,這時候可以自動填寫。【應該需要網頁 / app 端的支援】
這裡沒有具體展開,有個專門介紹這個 session 【Introducing Password AutoFil】

Asset Catalogs 的調整

現在顏色也能放在 Asset Catalogs 中了,更方便的使用廣色域的顏色。程式碼裡可以通過下面的方法獲取。【swift 下面可以直接看到顏色,心酸的 OC 啥都沒】

UIColor *color = [UIColor colorNamed:@"purple"];複製程式碼

可縮放大小的圖片

WWDC2017 筆記 - Cocoa Touch 中的新特性

  • 圖片用於不同尺寸的場合
  • 系統基本的 Dynamic type 縮放
  • tab bar 的圖片

WWDC2017 筆記 - Cocoa Touch 中的新特性

tabbar image 大的 size ,障礙人士。【使用這個的話,會預設啟用】

提升

通過 UIScreen 的 maximumFramesPerSecond 可以獲取當前螢幕的重新整理率
獲取螢幕的重新整理率,增強滑動和動畫效果。

Metal apps 可以更好的得到提升。

本地化

針對某些國家從右到左的閱讀習慣的改變,舉得例子是 設定介面的反轉。

That’s all,當然這些是簡單的介紹,具體的還有見各個子 session,詳細的在官方的文件中均已更新。

相關文章