WKWebView 中的 IOS 10 链接预览 API 已翻译 100%

oschina 投递于 2016/10/25 16:21 (共 4 段, 翻译完成于 10-26)
阅读 2094
收藏 6
0
加载中

多种触摸手势一直是iPhone使用体验必不可少的一部分,然而双指捏合和点击技术已成为历史。去年,iPhone 6S引入了一项全新的3D Touch多点触摸体验。支持3D Touch的显示器能够感知到用户触摸屏幕的力度。由于采用了这项技术,在其他内容中,iOS获得了新的Peek and Pop体验,让使用者可以预览Safari中的内容。我非常高兴的宣布一些 WKWebView开发者可以使用的更新。

Peek and Pop

WebKit支持  Peek and Pop作为预览链接的最简单的方式。使用iOS 10 SDK开发的App默认开启了Peek and Pop链接预览,但这并不是一个新特性;从iOS 9开始,在支持3D Touch的设备中使用WKWebView的allowLinkPreview属性,WKWebView客户端就可以选择基于Peek的链接预览。当allowLinkPreview属性设为true时,使用者可以轻轻的按下链接来查看,然后在app上的另一个视图里加载链接,同时app在背景中模糊显示。

如果使用者用力按下链接,链接会在Safari中弹出。

shirleywong
shirleywong
翻译于 2016/10/25 17:40
0

并非所有的应用程序都相同

这种变化非常适合类似邮件这样的应用程序。邮件中使用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中的链接。

承蒙
承蒙
翻译于 2016/10/26 10:38
1

在 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将提供一个自定义视图控制的机会,前提是用户触摸时有足够的力度来启动查看。

承蒙
承蒙
翻译于 2016/10/26 09:28
0

如果用户输入Peek,那么webView(_:previewingViewControllerForElement:defaultActions:)为其提供了一个定制视图控制器的机会。返回任何非空视图控制器都会导致视图控制器显示为Peek预览。defaultActions参数是一个活动数组,WebKit Webkit默认使用它作为previewActionItems。如果想要使用这些活动中的任何一个,你只需从视图控制器的previewActionItems执行结果中返回即可。这里是WKPedia中这个委托方法的实现情况:

func webView(_ webView: WKWebView, previewingViewControllerForElement elementInfo: WKPreviewElementInfo, defaultActions previewActions: [WKPreviewActionItem]) -> UIViewController? {
    // If this URL is not allowed by our navigation policy, then it must not be a link
    // to a page on Wikipedia, so returning nil will let WebKit display its default
    // preview which will pop to Safari.
    if !navigationAllowedForURL(elementInfo.linkURL) {
        return nil;
    }

    let previewViewController = ArticlePreviewController()

    previewViewController.view.frame = self.view.frame
    previewViewController.view.backgroundColor = UIColor.white()

    var actions = [WKPreviewActionItem]()
    for previewAction in previewActions {
        if previewAction.identifier == WKPreviewActionItemIdentifierShare {
            actions.append(previewAction)
        }
    }
    previewViewController.defaultPreviewActionItems = actions

    previewViewController.load(request: URLRequest(url:elementInfo.linkURL))

    return previewViewController}

最后,如果用户用足够的力触摸来弹出视图控制器,webView(_:commitPreviewingViewController:)将被调用。此时,你可以选择在app中展示弹出的视图控制器。

这个API为开发者提供了对Peek and Pop的控制来达到更好的用户体验。我期待在更多app中见到它!

shirleywong
shirleywong
翻译于 2016/10/26 14:42
0
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(0)

返回顶部
顶部