教程

10

阅读时间

使用范围触发器创建长按菜单动画

学习如何使用范围触发器通过长按来隐藏和显示元素。

Briandito Priambodo, 设计师兼撰稿人 @ The Tiny Wisdom
connect ai agents like claude, cursor and more to protopie via mcp

简介

有时,由于移动应用中的空间有限,我们需要把一些菜单隐藏到一个按钮里。

在这篇文章中,我们将学习如何使用 Range 触发器,在长按按钮时隐藏和显示悬浮菜单按钮,创建一个很棒的交互。

你将学到什么

  1. 创建长按交互

  2. 触摸时缩放悬浮按钮

最后,你将能够做出这样的效果!


Long Press Menu Prototype Made With ProtoPie

[起始 Pie 文件] [完成版 Pie 文件]

分步说明

1. 创建长按交互

 1. 选择“plus”按钮图层,并添加一个 Long Press 触发器。


Select the "plus" button layer, and add a Long Press trigger.

 2. 选择 Live 菜单按钮,并在 Long Press 触发器中添加一个 Move 响应。我们将使用它当前的 X 和 Y 位置作为 Move 响应的值。

将 X 值设为 114,Y 值设为 685


Set the X value to 114 and the Y value to 685

💡 我们使用 Live按钮当前位置,因为它已经处于正确的“显示”位置。

 3. 对另外 2 个悬浮菜单按钮执行相同操作。选择这些菜单按钮,在 Long Press 触发器下添加 Move 响应,并使用各自的 X 和 Y 位置作为 Move 响应值。


Add a move response under the Long Press trigger

💡 你可以调整 Move 响应的时间轴来获得有趣的交互。尝试更改缓动、开始延迟和时长,看看它们如何影响这个微交互。

 4. 现在我们已经有了 Plus 按钮被长按时 3 个悬浮菜单按钮的“显示”位置。但在初始状态下,我们希望它们是隐藏的。

让我们把这 3 个按钮隐藏到 Plus 按钮下方。你可以手动拖动它们,让它们位于 Plus 按钮后面,或将 X 设为 188Y 值设为 753


Set the X to 188 and the Y value to 753

完成后,你将能够在原型中长按并显示隐藏的悬浮菜单按钮。不过,这还只是交互的一半,因为当你抬起手指时,还需要把它们隐藏起来。

 5. 为了隐藏悬浮菜单按钮,选择 Plus 按钮图层并添加一个 Touch Up 触发器。该触发器用于检测手指何时从原型上释放触摸。


Select the Plus button layer and add a Touch Up trigger

 6. 然后,重置悬浮菜单按钮的位置。为此,选择每个按钮并添加一个 Reset 响应。


Select each of the buttons and add a Reset response

Reset 响应是一个很有用的响应,可以重置对元素所做的所有更改,因此你不必手动操作。记住这一点!

 7. 然后……我们完成了!现在你可以使用长按触发器来隐藏和显示组件。接下来进入下一步,让交互更有趣!


Creating the long-press interaction

2. 触摸时缩放按钮

当手指滑过悬浮菜单按钮上方时,我们将为其添加缩放交互:


Scale the buttons on-touch

 1. 首先,创建两个变量来存储手指的位置。把它们命名为 touchXtouchY。两个变量都选择第二个选项,添加变量 For This Scene


Create two variables to store the position of our fingers

 2. 在 ProtoPie 5.5 中,你可以在变量中使用公式。我们将捕获触摸位置,然后把它存入刚创建的变量中。

选择 touchX 变量,在右侧面板中勾选 Use Formula 复选框。在公式字段中输入 $touchX。对 touchY 也做同样操作,不过在公式字段中输入 $touchY


Capture the touch position and then store it in a variable


捕获触摸位置并将其存储到变量中

 3. 点击变量旁边的“debug”图标,这样你就可以看到 touchXtouchY 的值。


Press the "debug" icon next to the variable so you can see the value of touchX and touchY.

 4. 在你的原型中试一下。在长按 plus 按钮时,拖动手指,注意随着拖动 X 和 Y 的值会变化


Drag your finger around and notice the X and Y value change as you drag.

接下来,当我们将手指拖到悬浮菜单按钮上方时,会放大这些按钮。为此我们需要知道按钮的 X 和 Y“范围”。

X 和 Y 范围是按钮覆盖的屏幕区域。我们可以根据按钮位置减去按钮的高度/宽度来计算。请看下面这个 Live 按钮的示例:


The Live button size is 60px by 60px, and the position is on (144,685).

在上图中,Live 按钮大小为 60px x 60px,位置在 (114,685)


(144,685) is actually just pointing to a single pixel at the center of the button.

然而,(114,685) 实际上只是指向按钮中心的一个像素。当我们把手指拖到按钮上方时,需要覆盖按钮的整个区域,而不仅仅是中心点。

这就是为什么我们要使用 range 触发器。我们必须计算整个按钮的区域,因此需要扩展“中心”区域。


Get the start and end value for the floating buttons

由于我们从中心开始,只需将 X 减去 30 得到起始值,再将 X 加上 30 得到结束值。Y 值也是同样的做法

 5. 现在概念讲完了,让我们把触发器添加到原型中。在 range 触发器下选择 touchX 变量,因为我们要检测 touchX 的值。

选择 “range between” 图标(第三个图标),在起始值输入 84,结束值输入 144。这样我们就覆盖了 Live 按钮正确的 X 区域。


Select the "range between" icon (the third icon)

 6. 现在,我们还需要确保也覆盖按钮正确的Y 范围。在刚才的 range 触发器下,添加两个以 touchY 变量为属性的条件:

  • 第一个条件检查 touchY 的值是否大于 655。655 是 Live 按钮的起始范围

  • 第二个条件检查 touchY 的值是否小于结束范围,即 715


Add two conditions with the touchY variable as the property

 7. 在条件下添加一个 Scale 响应。当手指位于 Live 按钮上方时,我们希望将其放大。选择 Live 按钮图层并添加 Scale 响应。将 factor 值设为 120%。不过你也可以按喜好调整大小。


Set the value to factor to 120%

💡 这里我们使用的是 AND 逻辑:如果 X 范围匹配并且 Y 范围匹配,那么将按钮缩放到 120%。

  • 这意味着只有两个条件都满足时,按钮才会缩放到 120%。

 8. 如果你测试原型,可以看到当你长按并将手指拖到 Live 按钮时会出现缩放交互。不过,当你把手指移开时,它不会缩小回去。

要让它缩小,我们需要再添加一个 range 触发器。但这次要和之前相反。添加一个 Range 触发器,并选择 touchX 变量作为属性。

选择 “smaller and larger than” 范围,也就是右侧的第 4 个图标。将起始值设为 84,结束值设为 144


Select the "smaller and larger than" range

 9. 选择 Live 按钮图层,并在 Range 触发器下添加一个 Scale 响应。将 factor 值设为 100%。这意味着当手指离开按钮触摸区域时,会将其缩放回 100% 大小。


Add a Scale response under the Range trigger

 10. 对 touchY 也做同样的事。添加一个 range 触发器,选择 touchY 变量作为属性,并选择“smaller and larger than”范围。将起始范围设为 655,结束范围设为 715。复制刚才为 touchX 创建的 Scale 响应,并粘贴到 touchY 的 range 触发器下。

💡 当检测手指是否在按钮外部时,我们使用的是 OR 逻辑。也就是说,如果 X 范围不匹配,或者 Y 范围不匹配,那么将按钮缩放到 100%。

  • 当任一条件满足时,就会触发缩放响应。

 11. 对另外 2 个悬浮菜单按钮也要应用相同逻辑。试着自己完成!可参考以下 X 和 Y 范围值:

  • Post 菜单按钮

  • X 范围起始:158

  • X 范围结束:218

  • Y 范围起始:619

  • Y 范围结束:679

  • Story 菜单按钮

  • X 范围起始:230

  • X 范围结束:290

  • Y 范围起始:655

  • Y 范围结束:715

 12. 当你完成最后一部分后……大功告成!你刚刚做出了自己的长按菜单交互!

就这些!

你刚刚使用长按和 range 触发器创建了自己的悬浮菜单按钮交互。多试试这个原型,看看它有多好看!

我们很想看到你疯狂的实验。创建你自己的原型,并在 TwitterInstagram 上带上 #MadeWithProtoPie 分享出来。

[这有帮助吗?告诉我们吧!]