设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 开源资讯 查看内容

WKWebView中的IOS 10链接预览 API

2016-10-27 21:43| 发布者: joejoe0332| 查看: 1037| 评论: 0|原作者: shirleywong, Tony|来自: oschina

摘要: 种触摸手势一直是iPhone使用体验必不可少的一部分,然而双指捏合和点击技术已成为历史。去年,iPhone 6S引入了一项全新的3D Touch多点触摸体验。支持3D Touch的显示器能够感知到用户触摸屏幕的力度。由于采用了这项 ...
种触摸手势一直是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中弹出。

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

这种变化非常适合类似邮件这样的应用程序。邮件中使用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中这个委托方法的实现情况:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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中见到它!


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部