教程

9

阅读时间

使用组件、变量和公式进行照片多选

了解如何选择和取消选择多张照片,这些照片会自动重新排序以保持合乎逻辑的数字顺序。

卡尔·布拉金, 科罗拉多大学博尔德分校用户体验设计专业学生

简介

图像是如今大多数数字产品中的强大资产。在强调图像的应用中,能够组织照片对用户体验至关重要。在本演示中,你将展示用户如何在保持数字顺序的同时选择和取消选择照片。本教程会引入一些顺序逻辑,这让它在思维上非常有挑战性!通过使用组件、变量和公式,你将能够掌握随机性,并为可选择和取消选择的照片建立秩序。

ProtoPie 通过使用组件让这件事更容易,因为你所做的更改会影响设计中所有相同的部分。使用组件可以加快你的工作流程!ProtoPie 还使用变量,这些变量携带的值在与公式配合时,能够对用户的交互(如选择和取消选择)作出反应。

你将学到什么

  1. 为每个组件实例设置一个特殊编号

  2. 当选择图像时,将每个复选框编号增加 1

  3. 让复选框在被选择时形成数字顺序

  4. 取消选择时将复选框编号减 1,并重新排序已选择的照片

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


Multi-Select Photos Prototype Made With ProtoPie

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

开始之前

你会注意到我们已经为你准备好了资源,帮助你快速开始。我们已将所有图像文件转换为组件,并启用了可带数字进行选择和取消选择的复选框。准备就绪,开始吧!

分步说明

1. 为每个组件实例分配唯一 ID

 1. 在应用主场景视图中,进入图像组件。你将编辑这个组件,这会对应用中预先填充了该组件实例的所有地方产生更改。

 2. 创建一个新的变量。你可以将其命名为 "ID"。你需要给每个组件一个唯一标识符来追踪它们分别是谁,这可以通过勾选Make Overridable(可覆盖)来实现。


Create a new variable and make it overridable

 3. 回到主场景,逐个选择组件并在 overrides(覆盖)框中将数字依次修改(1 到 8),从而为每个组件设置唯一编号(即唯一标识符)。如果你愿意,可以让编号与图像编号对应,但唯一要求是编号必须唯一


Give each component a unique number

2. 当选择图像时,将每个复选框编号增加 1

在这个原型中,每次你选择一张图像时,都希望数字增加 +1。我们将使用变量来控制图像上复选框中显示的文本。

 1. 回到组件,在第一个条件下创建一个Send响应。在消息框中,可以将其命名为 "select"。


Send a message called "select"

 2. 添加一个Receive触发器,并选择你刚创建的 "select" 消息。


Add a Receive Trigger and choose the 'select' message that you just created

 3. 创建一个新的变量并命名为 "order_of_selection",表示该变量用于控制被选择时的顺序编号。


Create a new variable and name it 'order_of_selection'

 4. 在Receive触发器下,创建一个 Assign 响应并将其关联到你创建的新变量(order_of_selection)。在 Formula 中,选择order_of_selection变量,并在公式末尾加上 "+1"。


Select the order_of_selection variable and add a '+1' to the end of the formula

 5. 在Receive触发器中添加一个Text响应,并将其指定到Number。将Content改为Formula,并插入你的 "order_of_selection" 变量。


Change the Content to a Formula and insert your 'order_of_selection' variable

 6. 现在,如果你测试场景,你会注意到每次选择照片时,复选框的所有数字都会增加 1。在接下来的步骤中,我们会修正这一点,让每个数字根据后续选择正确反应。

3. 让复选框在被选择时形成数字顺序

我们需要发送一些信息,让组件的其他实例能够对我们的选择作出反应。

 1. 在Tap触发器下的Send响应中,勾选Send Value Together,并将你创建的ID变量作为函数添加进去。


Check the Send Value Together box and add the ID variable you created as the function

 2. 在Receive触发器中,勾选Assign to Variable。此时我们需要将其保存到一个尚未创建的新变量中。


In the Receive trigger, check the Assign to Variable box

 3. 创建一个新变量并命名为 "activated"。由于我们已为组件的所有实例设置了唯一 ID,这个变量能让 ProtoPie 识别每个唯一组件何时被激活。


Create a new variable and call it 'activated'

 4. 在 Receive 触发器中,将Assign to Variable功能改为你刚创建的 "activated" 变量。


Change the Assign to Variable function to the 'activated' variable you just created.

 5. 在Receive触发器的Text响应下,添加一个新条件并设置为 ID = activated将 Text 响应移动到你刚创建的新条件下方。


Move the Text response underneath the new condition you just created.

💡 如果你现在测试场景,你可以选择一张照片,数字会按顺序逐个增加。如果你取消选择一个数字后再选择另一张照片,数字将不会正确响应,并且会乱序。我们将在下一步修复这个问题。

关于顺序逻辑的插曲

我们需要暂停一下,讨论有关数字重排的一点逻辑。假设你随机选择了五个组件。你会看到这些组件的数字框按 1,2,3,4,5 的顺序递增。当取消选择其中任意一个组件时,你希望其余数字通过减一来响应,但不能是随机变化。这些数字必须保持你选择它们时的顺序。

如果你随机选择组件后数字框变为 1,2,3,4,5,然后取消选择数字 3,会发生什么?4 会变成 3,5 会变成 4,但组件 1 和 2 保持不变。

这种复杂性被该应用设计流畅的用户界面所掩盖,但为了理解你在接下来的步骤中要实现的目标,这个思路是必要的。你要让数字减 1,并且让组件的数字顺序按逻辑重新组织。

4. 取消选择时将复选框编号减 1,并重新排序已选择的照片

 1. 在组件中,位于Tap触发器下并在Color响应下方,创建一个Send响应。在消息中命名为 "deselect",并勾选Send Value Together,使用 "ID" 变量。


Create a Send response under the Tap trigger below the Color response

 2. 创建一个新的Receive触发器,将消息改为你创建的 "deselect",并将变量指定为你的 "activated" 变量。


Assign the variable to your 'activated' variable

 3. 在Receive触发器下创建一个Assign响应,并确保它关联到你的 "order_of_selection" 变量。在公式中应为 order_of_selection -1


Create an Assign response under your Receive trigger

 4. 复制 receive 触发器下的条件,并粘贴到该 receive 触发器下方。删除Text响应,并改为添加一个Send响应。消息可命名为 "reorder",并勾选Send Value Together。完整公式应为 number('Number'.text)


Copy the condition under the receive trigger and paste this under the receive trigger

 5. 添加一个Receive触发器,并在消息框中填入 "reorder"。勾选Assign to Variable,用于另一个我们需要创建的新变量。


Add a Receive trigger and insert the 'reorder' into the message box

 6. 创建一个新变量并命名为 "number_of_deselected"。在你刚创建的Receive触发器中,将其设置为 "number_of_deselected"。


Create a new variable and call it 'number_of_deselected'

 7. 在这个新的Receive触发器下添加一个condition。我们将使用刚才在Send响应中使用的同一公式,因此将该公式复制并粘贴到新条件中。选择 ">" 值,并将比较值改为 "number_of_deselected" 变量。条件将为 number('Number'.text) > number_of_deselected


Add a condition under this new Receive trigger

 8. 在新条件下,添加一个关联到NumberText响应。将内容改为公式。完整公式应为 number('Number'.text)-1


Add a Text response that is linked to the Number

恭喜!

说真的,这一节并不容易。你可能需要回过头再看一遍第四步,才能完全掌握你刚刚完成的技巧,但这是一点可以以有趣方式复用的逻辑魔法。继续前进,创造你自己的 ProtoPie 魔法吧(别忘了分享)!

[这对你有帮助吗?欢迎告诉我们!]