种触摸手势一直是iPhone使用体验必不可少的一部分,然而双指捏合和点击技术已成为历史。去年,iPhone 6S引入了一项全新的3D
Touch多点触摸体验。支持3D Touch的显示器能够感知到用户触摸屏幕的力度。由于采用了这项技术,在其他内容中,iOS获得了新的Peek
and Pop体验,让使用者可以预览Safari中的内容。我非常高兴的宣布一些 WKWebView开发者可以使用的更新。
Peek and PopWebKit支持 Peek and Pop作为预览链接的最简单的方式。使用iOS 10 SDK开发的App默认开启了Peek and Pop链接预览,但这并不是一个新特性;从iOS 9开始,在支持3D Touch的设备中使用WKWebView的allowLinkPreview属性,WKWebView客户端就可以选择基于Peek的链接预览。当 allowLinkPreview属性设为true时,使用者可以轻轻的按下链接来查看,然后在app上的另一个视图里加载链接,同时app在背景中模糊 显示。 如果使用者用力按下链接,链接会在Safari中弹出。 并非所有的应用程序都相同这种变化非常适合类似邮件这样的应用程序。邮件中使用WebKit来显示大量的HTML内容,但它不是一个网页浏览器,因此连接导航总是交给 Safari。然而,许多WebKit应用程序处理链接导航及表现更像自带了浏览器。在iOS 10 中我们让Peek和Pop在这些类型的应用上表现更好。 关于WKPedia的设想。 Anders和我开发了WKPedia,一个的维基百科的浏览器应用程序,作为在iOS 8中WKWebView 的示例应用程序。WKPedia 有一个WKNavigationDelegate,强制导航策略,以便于当用户点击访问其他维基百科页面的链接时交给WKPedia应用程序中的导航处 理,但是如果用户点击任何其他托管域名的链接时,WKPedia将导航交给Safari处理。 我设置allowedLinkPreview为true是为了可以启动Peek和Pop,但这个默认行为在这个应用程序中效果并不理想。现在如果一个用户 点击一个链接,WKPedia使用加载策略来决定是否导航到应用程序内部链接还是将其交给Safari来处理。但是如果她读取并弹出这个链接,那么无论加 载策略如何,弹出项将总是导航到Safari中的链接。 在 iOS 10 中自定义Peek and Pop如果你有像WKPedia这样的应用程序,并寻求能提供更好的用户体验,你可以开始使用我们在iOS 10里面添加的新的API!在新的API中,只要用户在WKWebView中使用3D Touch查看和弹出链接就可以显示自定义视图控制器。这个API是由WKUIDelegate协议中的三个委托方法组成。 optional func webView(_ webView: WKWebView, shouldPreviewElement elementInfo: WKPreviewElementInfo) -> Bool optional func webView(_ webView: WKWebView, previewingViewControllerForElement elementInfo: WKPreviewElementInfo, defaultActions previewActions: [WKPreviewActionItem]) -> UIViewController? optional func webView(_ webView: WKWebView, commitPreviewingViewController previewingViewController: UIViewController) 第一个方法,当用户触摸元素时webView(_:shouldPreviewElement:)立即被调用。返回false将完全禁用该元素的预览,并且阻止其他方法的调用。返回true将提供一个自定义视图控制的机会,前提是用户触摸时有足够的力度来启动查看。 如果用户输入Peek,那么webView(_:previewingViewControllerForElement:defaultActions:)为其提供了一个定制视图控制器的机会。返回任何非空视图控制器都会导致视图控制器显示为Peek预览。defaultActions参数是一个活动数组,WebKit Webkit默认使用它作为previewActionItems。如果想要使用这些活动中的任何一个,你只需从视图控制器的previewActionItems执行结果中返回即可。这里是WKPedia中这个委托方法的实现情况:
最后,如果用户用足够的力触摸来弹出视图控制器,webView(_:commitPreviewingViewController:)将被调用。此时,你可以选择在app中展示弹出的视图控制器。 这个API为开发者提供了对Peek and Pop的控制来达到更好的用户体验。我期待在更多app中见到它! |