這篇文章是 What’s New in Cocoa Touch / UIKit Session 201 的一些整理。【基于OC】 轉(zhuǎn)自我的 Blog: Danny's Dream
Drag Drop 新的交互方式 拖拽
Drag
需要 Drag 的對象要 add 一個 UIDragInteraction ,用法類似于 UIGestureRecognizer 。 UIDragInteraction 有一個 UIDragInteractionDelegate 的代理,可以提供數(shù)據(jù),浮起的動畫,和自定義的拖動時的動畫。
Drop
接收 Drag 的對象的容器,容器要實現(xiàn)一個 UIDropInteractionDelegate 的代理,可以來根據(jù)拖入的對象調(diào)整當(dāng)前的界面。
TableView, CollectionView, TextView, TextField, WebView 原生控件都支持
配合剪切板 UIPasteConfiguration 食用會更加。
這個功能手機(jī)上可以在 文件 這個系統(tǒng) app 中體驗,里面的 tableview 和 collectionview 的 item 都是支持拖拽的。
File Manager
UIDocumentBrowserViewController
多了一個文件管理的 VC,默認(rèn)里面會顯示當(dāng)前 app 權(quán)限以內(nèi)的文件,包括本地的和存在 iCloud 的【如果三方 app 在 info.plist 中聲明了 UISupportsDocumentBrowser 或者 UIFileSharingEnabled 和 LSSupportsOpeningDocumentsInPlace 的話,可以獲得第三方 app 的文件】。
 構(gòu)造方法如下【該構(gòu)造還提供了文件篩選的能力】:
UIDocumentBrowserViewController* view = [[UIDocumentBrowserViewController alloc]
initForOpeningFilesWithContentTypes:@[@".txt",@".pages",@".pdf"]];
值得注意的是官方文檔中提到,在使用該 VC 時。
- 務(wù)必把文件管理里的 VC 作為應(yīng)用的 根 VC,不要把它放在 navigation,tab 或者 split 視圖中,也不要通過模態(tài)的樣式展現(xiàn)出來。
有上述需求的話用 UIDocumentPickerViewController 來替代。
- 由于文件可能被任何 app 中的 UIDocumentBrowserViewController 修改,所以對文件的操作盡量通過 UIDocument 子類 或者 NSFilePresenter 和 NSFileCoordinator 對象來操作。
新的 UINavigationBar
增加了大的標(biāo)題欄【覺得并不好看啊】,新增的 api,控制后面的 vc 層級是否需要繼續(xù)展示大的 title,或者全部使用大的 title??梢栽?Mail 的系統(tǒng) app 中體驗這個特性。
//聲明大標(biāo)題
self.navigationController.navigationBar.prefersLargeTitles = YES;
//包含三種模式 aoto / always / never (后續(xù) present 的view 是否需要大標(biāo)題)
self.navigationController.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeAutomatic;
增加了統(tǒng)一的 navigation 搜索欄,不用再加在 tableview 的 header 中了。
self.navigationController.navigationItem.searchController
現(xiàn)在 navigation bar 是獨立的,和你的 content vie 無關(guān),為了更好的處理這些系統(tǒng) view 的布局的變化,提供了
self.view.safeAreaLayoutGuide // auto layout
self.view.safeAreaInsets // 代碼布局
- (void)viewSafeAreaInsetsDidChange{
//當(dāng)布局變化的時候的回調(diào)
}
UIScrollView
解決了 navigation vc 和 scrollview 的 contentInset 的沖突的問題,現(xiàn)在 navigation vc 不在修改 contentInset 了。 增加了 contentInsetAdjustmentBehavior 這個屬性,默認(rèn)為 UIScrollViewContentInsetAdjustmentAutomatic ,可以用來自定義滑動時候的便宜效果。 通過 adjustedContentInset 可以獲取當(dāng)前的偏移量。
TableView 的修改
滑動操作 Row 增加了 UISwipeActionsConfiguration ,用來處理滑動操作。 UISwipeActionsConfiguration 通過 UIContextualAction 數(shù)組來初始化,可以配置不同的動作,左滑右滑等,還能配置 UISwipeActionsConfiguration 的 performsFirstActionWithFullSwipe 【Bool】屬性 來決定第一個事件是否響應(yīng)完整的滑動。
新的分界線 可以配置相對值和絕對值的 Inset
self.tableView.separatorInsetReference = UITableViewSeparatorInsetFromAutomaticInsets;
Swift 4 和 Foundation 的更新
這里是 OC 版的,我就不展開了,KeyPath 的新類型,還增加了 block 的 KVO 【然鵝 OC 并沒有】。
系統(tǒng)級別的手勢事件控制
AutoLayout 和 Scroll View
class UIScrollView { var contentLayoutGuide: UILayoutGuide { get } var frameLayoutGuide: UILayoutGuide { get }}
動態(tài)類型
用于系統(tǒng)級別的調(diào)整大小,獲取動態(tài)的字體的大小。設(shè)計到 Auto Layout 的相關(guān)更新。
密碼自動填寫功能
場景是在 web 上登錄賬戶之后,點擊下線 app ,然后調(diào)整 appstore,打開 app ,輸入密碼,這時候可以自動填寫?!緫?yīng)該需要網(wǎng)頁 / app 端的支持】 這里沒有具體展開,有個專門介紹這個 session 【Introducing Password AutoFil】
Asset Catalogs 的調(diào)整
現(xiàn)在顏色也能放在 Asset Catalogs 中了,更方便的使用廣色域的顏色。代碼里可以通過下面的方法獲取。【swift 下面可以直接看到顏色,心酸的 OC 啥都沒】
UIColor *color = [UIColor colorNamed:@"purple"];
可縮放大小的圖片

- 圖片用于不同尺寸的場合
- 系統(tǒng)基本的 Dynamic type 縮放
- tab bar 的圖片
 tabbar image 大的 size ,障礙人士?!臼褂眠@個的話,會默認(rèn)啟用】
提升
通過 UIScreen 的 maximumFramesPerSecond 可以獲取當(dāng)前屏幕的刷新率 獲取屏幕的刷新率,增強(qiáng)滑動和動畫效果。
Metal apps 可以更好的得到提升。
本地化
針對某些國家從右到左的閱讀習(xí)慣的改變,舉得例子是 設(shè)置界面的反轉(zhuǎn)。
That’s all,當(dāng)然這些是簡單的介紹,具體的還有見各個子 session,詳細(xì)的在官方的文檔中均已更新。
|