在屏幕上开三个窗口汇编_探索 iPadOS 的多窗口机制

253da9588d1fb90a2b88d2cdf3fdd065.png

本文节选自「iPad Power User」,如果你对 iPad、iPadOS 感兴趣,欢迎订阅这份每周更新的邮件通讯,年度订阅还将免费获得《iPad Pro 生产力指南 2.0 》、《iPad Pro 优质应用 Top100》等电子书。

iPadOS 带来了很多用户「梦寐以求」的多窗口功能,过去两周的时间里,随着 iPadOS 正式发布,已经有非常多的应用适配了这个特性,自 6 月份开始重度使用 iPadOS 五个月后,我意识到这是每个 iPad 用户值得花点时间去思考、体验的功能,本文我会将自己的一些想法以问答的形式整理出来,供大家参考。

1. 为什么需要多窗口?

不管是 Windows 还是 macOS,同时打开多个窗口几乎「镶嵌」到用户行为习惯里,这是桌面级计算设备长期以来「制造」出来需求。

但习惯并不意味着是一定正确。多窗口需要一定尺寸的屏幕作为基础,同时还需要巨大的硬件条件,多窗口的确可以满足某些特定场景的工作需求,但多窗口也天然放大了用户注意力分散的事实,这个体验,相信长期使用桌面设备的读者会有同感。

从这个角度上看,此次 iPadOS 带来的应用多窗口机制,更像是向绝大多数用户行为习惯的妥协,或者是苹果「愿意倾听用户需求」,无论怎么理解,这都是苹果主动投好的行为,而且,由于 iPad 尺寸众多,多窗口在不同屏幕尺寸上的表现,实在难说一致,这也让我觉得,苹果似乎还没有想好如何在用户习惯与用户体验之间实现平衡。

2. 多窗口会成为应用的必备吗?

或许是。但我个人认为,不是每一个应用都需要适配多窗口。如果说 Office 等办公文件的多窗口机制可以释放作为生产力应用的优势,那么打开任务管理应用(如 2Do)的两个窗口,意义在哪里?又或者,同时在 Kindle 应用里打开两个窗口,左右各一本书的目的是什么?

这既是给开发者的命题,也是每个用户需要思考的问题,过往在桌面设备上的多窗口运行习惯,到底是提升了自己的工作效率还是摧毁了自己的注意力?

3. 在 iPadOS 上如何启动多窗口?

截止到目前,在适配 iPadOS 多窗口特性的应用里,提供了三种不同的打开方式,其一是应用内直接拖拽,比如 Drafts,可以直接将一条草稿拖拽到左侧或右侧打开。

92eb8b5b27ab959481e894a795218cc5.png

其二是在打开应用后,利用程序坞拖出另一个窗口。最典型的就是 Bear,我在它的更新日志看到了多窗口特性,但就是找不到,后来自己尝试在程序坞里拖拽才成功,这个方法也适用于 Drafts 等应用。

c6c2cd9dc84ab5c917344dac8584be6f.png

其三,利用「显示所有窗口」的方法,打开新窗口。如下图所示,长按某个应用图标找到「显示所有窗口」,点击之后就进入到官方所言的「App Exposé」,利用右上角的「+」建立新的窗口。

ef519ee5c9610d07ccd046ec584d8133.png

上述三个方法里,绝大多数应用采用的是第一个方式,第三个则是万能方法,而只能通过程序坞的方式打开,似乎目前只有 Bear。

4. iPadOS 上多窗口形态有哪些?

苹果在 iPadOS 的官方介绍里强调了「侧拉」的价值,正如下图所言,「侧拉」实现了让常用应用随时待命。

0367c9f8a165b08b6f92e09ed02b247a.png

更重要的一点是,由于「侧拉」中的应用并不要求应用适配多窗口功能,这也让「侧拉」具备了更大的应用场景,我在使用 iPadOS 的过程里,更喜欢以「侧拉」代替分屏。究其原因,一方面可以将注意力完全放在当下的工作屏幕上,另一方面,截止目前一些支持多窗口的应用,在分屏状况下经常会出现这样那样的问题,非常影响工作效率。

56928441d424310e48a048bc2962806e.png

上图是我在 iPadOS 上最喜欢的一种工作状态,如果说底部的程序坞构成了快速访问应用的「第一级菜单」,那么通过「侧拉」形成的应用则是「第二级菜单」,反而屏幕上的图标不再那么重要。

综上,多窗口机制的加入,为 iPad Pro 丰富了新的应用使用逻辑,苹果在向主流习惯靠拢的同时并未完全照顾到不同尺寸屏幕的体验,而且对于开发者和用户而言,多窗口运行一款应用的目的何在,并不会有一个「绝对正确」的答案,值得我们继续去思考与探索。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供汇编代码实现此功能。以下是代码: ``` ; 定义屏幕宽度和高度 SCREEN_WIDTH equ 80 SCREEN_HEIGHT equ 25 ; 定义窗口位置和大小 WINDOW_X equ 10 WINDOW_Y equ 5 WINDOW_WIDTH equ 60 WINDOW_HEIGHT equ 15 ; 定义彩色输出的宏 print_color macro msg, fg, bg push ax push bx push cx push dx mov ah, 0x0E ; 设置打印字符的功能号 mov bh, 0 ; 页面号 mov bl, bg ; 背景颜色 mov cx, 1 ; 字符串长度 mov al, fg ; 前景颜色 mov bx, 0 ; 字符的属性 lea dx, msg ; 字符串地址 int 0x10 ; 调用BIOS中断 pop dx pop cx pop bx pop ax endm ; 定义绘制窗口的宏 draw_window macro push ax push bx push cx push dx mov ah, 0x0F ; 设置文本模式的功能号 int 0x10 ; 调用BIOS中断 mov ah, 0x02 ; 设置光标位置的功能号 mov bh, 0 ; 页面号 mov dh, WINDOW_Y ; 窗口的起始行 mov dl, WINDOW_X ; 窗口的起始列 int 0x10 ; 调用BIOS中断 mov ah, 0x09 ; 设置颜色和打印字符串的功能号 mov bh, 0 ; 页面号 mov bl, 0x1F ; 蓝色背景,白色前景 mov cx, WINDOW_WIDTH ; 字符串长度 lea dx, window_top ; 字符串地址 int 0x10 ; 调用BIOS中断 mov ah, 0x02 ; 设置光标位置的功能号 mov bh, 0 ; 页面号 mov dh, WINDOW_Y + WINDOW_HEIGHT - 1 ; 窗口的结束行 mov dl, WINDOW_X ; 窗口的起始列 int 0x10 ; 调用BIOS中断 mov ah, 0x09 ; 设置颜色和打印字符串的功能号 mov bh, 0 ; 页面号 mov bl, 0x1F ; 蓝色背景,白色前景 mov cx, WINDOW_WIDTH ; 字符串长度 lea dx, window_bottom ; 字符串地址 int 0x10 ; 调用BIOS中断 mov ah, 0x02 ; 设置光标位置的功能号 mov bh, 0 ; 页面号 mov dh, WINDOW_Y + 1 ; 窗口的起始行 mov dl, WINDOW_X ; 窗口的起始列 int 0x10 ; 调用BIOS中断 mov ah, 0x09 ; 设置颜色和打印字符串的功能号 mov bh, 0 ; 页面号 mov bl, 0x1F ; 蓝色背景,白色前景 mov cx, WINDOW_WIDTH ; 字符串长度 lea dx, window_left ; 字符串地址 int 0x10 ; 调用BIOS中断 mov ah, 0x02 ; 设置光标位置的功能号 mov bh, 0 ; 页面号 mov dh, WINDOW_Y + 1 ; 窗口的起始行 mov dl, WINDOW_X + WINDOW_WIDTH - 1 ; 窗口的结束列 int 0x10 ; 调用BIOS中断 mov ah, 0x09 ; 设置颜色和打印字符串的功能号 mov bh, 0 ; 页面号 mov bl, 0x1F ; 蓝色背景,白色前景 mov cx, WINDOW_HEIGHT - 2 ; 字符串长度 lea dx, window_right ; 字符串地址 int 0x10 ; 调用BIOS中断 pop dx pop cx pop bx pop ax endm ; 定义窗口的四个边界 window_top db '+--------------------------------------------------------------+', 0 window_bottom db '+--------------------------------------------------------------+', 0 window_left db '|', 0 window_right db '|', 0 ; 代码段 code segment assume cs:code, ds:data start: mov ax, data mov ds, ax ; 初始化数据段寄存器 mov ax, 0x03 ; 设置文本模式的功能号 int 0x10 ; 调用BIOS中断 draw_window ; 绘制窗口 mov ah, 0x02 ; 设置光标位置的功能号 mov bh, 0 ; 页面号 mov dh, WINDOW_Y + 5 ; 输出“Welcome you!”的行号 mov dl, WINDOW_X + 20 ; 输出“Welcome you!”的列号 int 0x10 ; 调用BIOS中断 print_color welcome_msg, 0x0F, 0x1F ; 输出“Welcome you!” mov ah, 0x00 ; 等待键盘输入的功能号 int 0x16 ; 调用BIOS中断 mov ax, 0x4C00 ; 设置程序结束的功能号和返回值 int 0x21 ; 调用DOS中断 code ends end start ; 数据段 data segment welcome_msg db 'Welcome you!', 0 data ends ``` 这段代码使用了宏来简化彩色输出和绘制窗口的过程,并定义了窗口的位置和大小。在代码中,首先初始化数据段寄存器,然后调用BIOS中断绘制窗口,接着输出“Welcome you!”,最后等待键盘输入并退出程序。您可以尝试在汇编器中运行此代码,看看效果如何。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值