Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >iPad Safari多窗口视图分析和实现思路

iPad Safari多窗口视图分析和实现思路

原创
作者头像
horsley
发布于 2019-04-02 15:25:15
发布于 2019-04-02 15:25:15
4.3K1
举报

2019年苹果更新了 iPad mini 和 Air 的产品线,iPad 算是个相当好用的产品,比起 iPhone ,部分型号允许你外接键盘、使用触控笔等硬件来提升生产力,那么我们从软件应用开发角度可以如何帮助用户提升生产力呢?这里我将以 Safari 为参考探讨它的实现思路。

Safari 是 iOS 系统自带的浏览器,支持打开多个网页窗口。在手机上,由于屏幕空间有限,点击窗口管理的按钮可以看到手机上采用了一种视图层叠的效果,有点模拟从一个实体文件夹中翻查文件的感觉。

iPhone Safari 的多窗口管理
iPhone Safari 的多窗口管理

而在iPad 上,同样的按钮打开的视图是一个大纲视图,所有的网页窗口平铺展示,就像桌面平台的多窗口管理

iPad 上 Safari 的多窗口管理
iPad 上 Safari 的多窗口管理

我们再认真观察一下 Safari 的大纲视图,我们发现除了大纲视图可以进行过度拖动和回弹,双指捏合也可以进行过度缩小并回弹,双指搓开放大某个页面缩略图的时候可以退出大纲视图,聚焦到该缩略图的页面,由此我们猜测这里很可能是一个 ScrollView。另外我们可以看到缩略图的顶部有一个标题栏和一个关闭按钮,在双指缩放放大的过程中我们可以看到一个临界点,超过这个临界点的时候标题栏会渐隐,露出原本页面截图顶部的搜索栏和标签栏。放大的过程默认 Safari 会对最后聚焦的窗口的缩略图标题做上述处理。这里还有一点小细节,因为捏合过程双指还可以移动,我们实测 Safari 选择最终放大的页面还会根据捏合手势结束之后哪个视图占据目前视口面积较多、距离视口中心最近来决定,和前述标题的变化无关。

要实现类似的效果,我们需要了解 Container View Controller。我们常用的 UITabBarController、UINavigationController 都是这样的容器控制器(还有一个在 iPad 分屏展示会用到的 UISplitViewController)。他们的核心在于管理和控制多个子级ViewController 的视图,通过自己定制创造一个新的Container View Controller我们可以做出不一般的交互,例如我们这次说的多窗口管理。

每个窗口可以是一个独立的 ViewController,我们再创建一个Container View Controller来管理这些独立的 ViewController。Container View Controller 的 view 我们可以添加一个ScrollView,每当一个新的 ViewController 需要展示,我们参考Apple的示例代码添加childViewController,并把视图添加到 scrollView 上,具体frame定位可以根据scrollView 大纲视图的排布来定,然后我们通过设置 scrollView 的 zoomScale和 contentOffset 来使得新 vc 的 view 正好充满整个视口。

代码语言:txt
AI代码解释
复制
- (void) displayContentController: (UIViewController*) content {
   [self addChildViewController:content];
   content.view.frame = [self frameForContentController];
   [self.scrollView addSubview:self.currentClientView];
   [content didMoveToParentViewController:self];
}

除了上述的实现方法之外,我们还可以利用 snapshotViewAfterScreenUpdates: 这个 API 来获取具体某个页面的截图。通过截图这个障眼法来操作可以避免 ScrollView 的交互和子视图中的交互发生冲突。具体来说,从某个具体页面切换到大纲视图之前,对页面做一个截图,ScrollView 中也不再加载具体的 ViewController 的 view 而是仅放置静态截图。当从大纲视图回到具体页面,同样可以通过操作 zoomScale和 contentOffset 来使得截图铺满视口,完成后再操作实际 ViewController 的 view 带到视图顶层,再把截图卸载。从 Safari 的表现来看它极有可能也是采用截图的方式,我们实测网页中动态播放的视频到了大纲视图并不会继续动态播放,此外 Safari 在进程被杀后重启,大纲视图里仍有之前的截图,可以推测是通过静态截图的并落地的方式实现。

如果有人感兴趣可以留言,我再来补一个 demo,不过这里涉及的技术并不难,大家可以自己尝试。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
1 条评论
热度
最新
请大佬赐一个Dome 研习一下 感谢🙏🏻
请大佬赐一个Dome 研习一下 感谢🙏🏻
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
Apple新专利:在标签页间轻松切换
从几年前开始,多标签的设计理念就全面代替了多窗口布局。无论是在浏览器,还是文件管理器上,都经常能够见到多标签设计。随着硬件性能越来越强大,同时打开的标签数也越来越多。在屏幕空间有限的前提下,数量众多的标签将变得难以辨识和切换。在多标签的管理上IE8曾经做过一个非常好的尝试,在标签栏起始位置放置一个缩略图按钮,点击之后所有打开的标签就会以缩略图的形式平铺在同一个页面。不过大概是因为使用率不高,在IE9之后就取消了。而chrome则提供了标签页自由拆分组合的功能来解决屏幕空间的限制。
reizhi
2022/09/26
1.2K0
Apple新专利:在标签页间轻松切换
Bootstrap实战 - 瀑布流布局
讲 Bootstrap 基础的教程网上已经很多了,实际上 Bootstrap 中文网(bootcss.com)里的文档已经写的很详细了,但实战的案例却不多。这里用一些当前流行的网页布局为导向,使用 Bootstrap 中的样式来完成它。每次只讲与案例相关的知识点,边学边练,加强理解。练习本案例需有 HTML/CSS 基础。
除除
2021/12/09
3.1K0
你可能需要为你的 APP 适配 iOS 11
导语:iOS 11 为整个生态系统的 UI 元素带来了一种更加大胆、动态的新风格。 本文介绍iOS11中在UI方面做了哪些更新,有些更新可以为用户提供更加完美的体验,但也有的可能会给目前的APP带来异常bug 前言 前几天发现在做的APP在 iOS11 系统上动画有异常,在其他系统的设备上都是正常的,动画的操作是观察tableView的contentOffset变化后执行的,异常动画发生在tableView reloadData之后,也就是说tableView reloadData之后,tableView的
腾讯Bugly
2018/03/23
2.1K0
你可能需要为你的 APP 适配 iOS11
WeTest质量开放平台团队
2017/08/04
2.9K0
你可能需要为你的 APP 适配 iOS11
18个您想了解的微小但有用的macOS功能
macOS具有许多如此小巧而有用的功能,在您偶然发现它们或有人将它们指出给您之前,很容易错过它们。
office小助手
2020/12/25
7.8K0
18个您想了解的微小但有用的macOS功能
你可能需要为你的APP适配iOS11
作 者 sonia,腾讯移动客户端开发 工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。 WeTest 导读  iOS 11 为整个生态系统的 UI 元素带来了一种更加大胆、动态的新风格。 本文介绍了iOS11在UI方面做了哪些更新,有些更新可以为用户提供更加完美的体验,但也有的可能会给目前的APP带来异常bug。 前言 前几天发现在做的APP在iOS11系统上动画有异常,在其他系统的设备上都是正常的,动画的操作是观察tableView的contentOffset变化后执行的,异常
WeTest质量开放平台团队
2023/05/04
1.1K0
你可能需要为你的APP适配iOS11
阅读器多种翻页的设计与实现
UIKit提供UIPageViewController可以很方便实现平移的页面切换效果,使用流程: 1、创建UIPageViewController;
落影
2020/02/18
3.8K0
阅读器多种翻页的设计与实现
Safari 18.0 WebKit 新特性介绍
干扰控制功能允许你在浏览网页时隐藏干扰项,例如登录横幅、Cookie 偏好弹窗、新闻通讯注册覆盖层等。该功能适用于 iOS 18、iPadOS 18 和 macOS Sequoia 上的 Safari。
ACK
2024/09/26
8270
Safari 18.0 WebKit 新特性介绍
【IOS开发基础系列】UIScrollView专题
       在滚动过程当中,其实是在修改原点坐标。当手指触摸后,scroll view会暂时拦截触摸事件,使用一个计时器。假如在计时器到点后没有发生手指移动事件,那么scroll view 发送 tracking events 到被点击的subview。假如在计时器到点前发生了移动事件,那么 scroll view 取消tracking 自己发生滚动。
江中散人_Jun
2023/10/16
1.3K0
【IOS开发基础系列】UIScrollView专题
IOS开发系列——启动页专题【整理,部分原创】
两种方式,一种是使用系统自带的,按规则定义启动图片名称即可,显示为1秒,要想延长时间,用[nsthread sleepForTimeInterval:5.0] ,另一种就是自定义uiivew,加到window中去。
江中散人_Jun
2022/03/08
2.1K0
IOS开发系列——启动页专题【整理,部分原创】
紫光同创国产FPGA学习之Physical Constraint Editor
该文档详细描述了Physical Constraint Editor(以后简称PCE)的使用方法和各项功能。PCE能够对实例和IO进行布局约束、区域约束和I/O设置。 PCE主界面,如图1-1所示。
全栈程序员站长
2022/11/03
2.4K0
Substance Painter 2021中文免费版下载Substance Painter 2022安装教程
substance painter 2021中文破po解版是一款由 allegorithmic公司官方制作的软件,它是一款能实时绘制出3D贴图的绘图工具,它为用户提供了一些非常新奇的功能,比如粒子笔刷这个智能画笔,可以模拟自然粒子下落,粒子的轨迹形成纹理。与此同时,最实在的是该软件中的工作流是非破坏性的,即用户可以根据自己的需要自由地进行任意尝试;如果你制作出了不喜欢和不想要的内容,那也没关系,可以随意跳回或说撤销到上一阶段重新制作,从而无论要试怎样尝试,都可以大胆地跳回或说撤销到上一阶段重新制作,这样无论要试怎样尝试都能大胆地进行,反正要试怎样的尝试都可以大胆尝试。
用户10122115
2022/10/20
5.6K0
UIWebView 浏览器控件一、初始化与三种加载方式二、常用属性和方法三、代理方法 UIWebViewDelegate四、其它案例:
WebView的优缺点: 优点:(1)跨平台(2)发布更新快(3)排版布局能力强 缺点:(1)性能差(2)数据通讯复杂(3)耗费流量 使用场景:(1)排版复杂的内容(2)需后台灵活控制的界面 一、初始化与三种加载方式 UIWebView继承于UIView,因此,其初始化方法和一般的view一样,通过alloc和init进行初始化,其加载数据的方式有三种: 1.第一种: - (void)loadRequest:(NSURLRequest *)request; 这是加载网页最常用的一种方式,通过一
用户2141756
2018/05/18
1.7K0
【特斯拉组件】iOS高性能PageController
1.组件介绍 Page是企鹅FM研发的分页组件,包括支持分页非交互切换(通过方法调用导航切换)和交互切换(屏幕的手势滑动),多个分页Controller和View的管理。 1.1需求背景 为什么弃用UIPageViewController,首先介绍一下UIPageViewController,这是系统为开发者定制的分页组件,提供了两种分页切换的效果,一是滑动 二是翻页。且提供了前后切换的回调。 a) UIPageViewController在iOS8以下的系统运行是有问题的,可以参考stackFlow上的症
腾讯Bugly
2018/03/23
2.2K0
Cocoa编程中视图控制器与视图类详解
iPhone编程规则是:一个窗口,多个视图。UIView是iPhone屏幕上很多控件的基础类。每个iPhone用户界面都是由显示在UIWindow(这其实也是个特殊的UIView)内的众多UIView及其专门化子类构建的。 显示数据的视图: UITextView UILabel UIImageView UIWebView MKMapViews UIScrollView 可选择的视图(以下两个视图类实例都是模态显示的): UIAlertView UIActionSheet  所有控件(控件是将用户触摸转换为回
猿人谷
2018/01/17
6.5K0
Cocoa编程中视图控制器与视图类详解
设计师应该了解的iOS应用开发基础知识
先祝各位假期愉快喽。不知有多少同学和我一样计划把这8天当中的多数时间花在“宅”上;做做博客和小项目,看看live视频,录点demo出来,太赞了这日子。
腾讯TMF团队
2022/12/14
1.1K0
理解 UWP 视图的概念,让 UWP 应用显示多个窗口(多视图)
发布于 2018-07-27 01:19 更新于 2018-07-29 23:53
walterlv
2018/09/18
1.8K0
理解 UWP 视图的概念,让 UWP 应用显示多个窗口(多视图)
[WordPress主题]2019大前端dux6.0最新无限制版
DUX主题是基于WordPress程序的主题,由themebetter团队原创开发,是目前比较火的wordpress主题,和大前端主题一样比较优秀的主题还有begin知更鸟,两者功能都很多,界面也比较好看,做一个个人博客完全够用了,今天爱游分享就是大前端5.2主题,已去除域名限制。
爱游博客
2019/08/07
3.6K0
[WordPress主题]2019大前端dux6.0最新无限制版
iOS组件化过程中遇到的问题及解决方案iOS组件化过程中遇到的问题及解决方案
Bundle中的图片命名:如果图片命名为640x1136,则真机无法加载,模拟器无影响,需改为640*1136
且行且珍惜_iOS
2021/09/07
2K0
Safari上使用WebRTC指南
原文:https://webrtchacks.com/guide-to-safari-webrtc/
LiveVideoStack
2021/09/01
3.8K0
相关推荐
Apple新专利:在标签页间轻松切换
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档