行业

汽车

航空

金融

游戏

医疗科技

物联网

数字产品

使用场景

面向企业

面向个人

面向团队

用于教育

主要特点

硬件与系统集成

公测版

ProtoPie MCP

多设备原型设计

交互逻辑

开发交接

ProtoPie AI

用户测试

插件

Figma

Sketch

Adobe XD

洞见与灵感

博客

白皮书

客户成功案例

活动与网络研讨会

ProtoPie 画廊

产品学习与支持

ProtoPie 学堂

下载 ProtoPie

产品文档

社区

行业

汽车

航空

金融

游戏

医疗科技

物联网

数字产品

使用场景

面向企业

面向个人

面向团队

用于教育

主要特点

硬件与系统集成

公测版

ProtoPie MCP

多设备原型设计

交互逻辑

开发交接

ProtoPie AI

用户测试

插件

Figma

Sketch

Adobe XD

洞见与灵感

博客

白皮书

客户成功案例

活动与网络研讨会

ProtoPie 画廊

产品学习与支持

ProtoPie 学堂

下载 ProtoPie

产品文档

社区

教程

10

阅读时间

ProtoPie 中创建可复用组件指南 - 第 2 部分

了解如何仅使用单个元素创建一个强大且可扩展的单选按钮组件,从而减少代码并改进你的原型设计工作流程。

大卫·吉尔摩, 用户体验设计顾问

第 1 部分中,我们构建了一个可复用的单选按钮组件。虽然很实用,但它仍然需要大量代码,稍有改动就容易出错,并且最多只能支持六个按钮。

这一次,我们将升级方法。我们将从一个单选按钮创建一个高效组件,用它来构建任意大小的按钮组。此方法可显著减少代码量,并让你的组件更强大、更灵活。

在开始教程之前,先理解几个关键概念非常重要,这样你才能顺利跟上:

1. JSON 结构

ProtoPie 消息一次只能发送一个值。我们将使用 JSON 把多个值打包到一条消息中,从而发送更复杂的信息。

2. 可覆盖变量

可以把它们理解为组件实例的自定义属性。它们让我们能够给每个单选按钮赋予独特的身份和功能,使单个组件真正实现复用。

3. ProtoPie 与 Figma 中的覆盖(Overrides)

为了保持 Figma 与 ProtoPie 的同步,你必须谨慎处理覆盖内容。ProtoPie 中的覆盖始终会覆盖来自 Figma 的更改。一般来说,避免在 ProtoPie 中修改图形属性(形状、颜色、边框、字体、位置)。最好在 Figma 中管理这些属性,或通过在 ProtoPie 中响应“Start”触发器来修改。虽然文本值和不透明度可以在 ProtoPie 中更改,但通常仍建议通过触发器来实现。

4. 不透明度 vs. 隐藏图层

ProtoPie 没有“隐藏”图层的响应,但你可以更改其不透明度。关键是:无法检查图层是否被隐藏,只能访问其不透明度。请记住,即使图层不透明度是 100,它也可能在图层面板中被隐藏(因此不可见)。你可以删除或隐藏从 Figma 导入的图层而不破坏同步,但这必须在 ProtoPie Studio 中完成,而不能通过交互完成。

准备好构建一个更智能、可扩展性更强的组件了吗?让我们开始吧。

构建一个通用的单一单选按钮组件

前置条件

要跟随本教程,你可以在这里下载起始 pie 与 Figma 文件:起始 pie | Figma 文件

你也可以在这里下载最终 pie:最终 pie

第 1 步:初始设置

打开“Starting Pie.pie”文件。如果你无法访问 Figma,请直接跳到第 3 步。


Step 1: Initial Setup

第 1 步:首次打开时的 Starting Pie

第 2 步:导入并准备 Figma 资源(仅在可访问 Figma 时可进行)

删除“Starting Pie.pie”文件中现有的本地组件,并将“tutorial.fig”文件导入到 Figma。你应该会看到两个单选按钮设计:一个名为“Tick”,另一个名为“Dot”。选中两者并打开 ProtoPie Figma 插件。将两个对象都导出到 ProtoPie(确保插件显示正在导出 2 个对象)。

回到 ProtoPie 后,将 Tick 和 Dot 的位置设为 0,0,并将组件重命名为“Radio Buttons”。展开 Tick 和 Dot 的图层,确保它们都可编辑(如果不可编辑,请点击“Make Editable”)。此时,也建议将 ON 图层的不透明度设为 0,这样只会显示未选中的按钮。


Step 2a

第 2a 步:准备从 Figma 导出到 ProtoPie


Step 2b

第 2b 步:确保导入的图层可编辑

第 3 步:创建组件变量

打开 Radio Buttons 组件的组件编辑器。现在我们将创建所需变量:

  1. 添加一个名为“LABEL”的可覆盖文本变量——我们使用全大写字母表示可覆盖变量。

  2. 再添加一个名为“SET”的可覆盖文本变量。

  3. 添加一个名为“value”的文本变量——公式定义变量不用大写——并填入公式 regexreplace(LABEL," ","")。这样你的单选按钮在 UI 显示中可以包含空格,但内部值不带空格(否则会影响 JSON 的使用)。

  4. 添加一个名为“parameters”的文本变量,公式定义为“{\”Set":"+Set+", "Value":"+Value + “}”。

  5. 最后,添加一个名为“sender”的文本变量。发送消息时,它将用于接收该值。


Create component variables

第 3 步:为触发器和响应准备可编辑图层与变量

第 4 步:在 Start 时填充标签

现在你可以为组件添加代码。首先,你需要一个“Start”触发器,将对应标签填入各个潜在的文本字段。对于组件中每个应显示按钮标签的文本字段,添加一个文本响应,将变量“LABEL”填入该字段。


Populate labels on start

第 4 步:“Start”触发器及其响应

第 5 步:创建“Tap”触发器

所需的核心代码是对“Tap”触发器的响应;当组件被点击时,通过必要操作将按钮设为开启。最基本的做法是将任意“ON”图层的不透明度设为 100,并将“OFF”图层的不透明度设为 0。

除了开启按钮外,你还需要向整个场景发送一条消息,表示已选择“NEWVALUE”,并将变量 parameters 作为其值传递。


Create the 'tap' trigger

第 5 步:关键的 Tap 触发器及响应

第 6 步:处理传入值

该组件需要接收“NEWVALUE”消息。如果选择了另一个按钮实例,那么当前实例需要将自己关闭。为此,添加一个用于“NEWVALUE”的“receive”触发器,并将附带值赋给变量 sender。现在我们可以使用 parseJson 函数检查 sender 是否在同一组中但值不同;若是,则将其关闭(反向执行“Tap”触发器中的“ON”操作)。


Handle incoming values

第 6 步:“Receive”触发器及其响应

第 7 步:在场景中分配值

现在你可以切回场景使用新组件。你需要在场景中为“NEWVALUE”消息创建一个“receive”触发器,它同样会将附带的 parameters 赋给名为“sender”的变量。然后,对于每个可能的组,检查 sender 是否属于该组;如果是,就把该值存入对应变量。你希望创建多少单选按钮组,就需要为每组手动更新这段代码。


Assign values in the scene

第 7 步:用于将结果赋给场景变量的“Receive”触发器

第 8 步:构建按钮组

要使用该 pie,请将组件的重复实例拖入场景,并为每个实例设置各自的 LABEL 与所属的 SET。你还需要创建一个变量来存储该组的当前值。一个组可以包含任意数量的按钮,但每个按钮必须有不同的 LABEL,并且具有相同的 SET

每个单选按钮仍会同时显示 Tick 和 Dot 两种变体,因此在每个 SET 中,你还需要隐藏所有 Tick 或 Dot 版本之一。


Build the button sets

第 8 步:在每个按钮组中隐藏一种变体,并为每个按钮分配 LABEL 和 SET

第 9 步:同步设计更改

现在你可以回到 Figma,进一步优化单选按钮的视觉设计,调整颜色、字体、间距或对齐方式。准备好后,只需将更新后的画板重新导入到你的 ProtoPie 组件中。

只要你没有在 ProtoPie 中直接修改这些属性,它们就会自动更新以匹配你的 Figma 设计。你的交互应当仍能完美运行。

如果样式没有更新怎么办? 如果你在 ProtoPie 中不小心改动了某个属性(例如“Tick”或“Dot”的颜色),它将不再与 Figma 同步。要修复此问题,请在组件内删除被修改的图层,从 Figma 重新导入干净对象,然后在所有使用该图层的响应中重新关联新图层。

专业提示: 若想在 ProtoPie 中试验更改而不破坏 Figma 链接,请使用 Start 触发器来应用这些更改。这种基于代码的方法只会在原型运行时覆盖 Figma 样式,从而保持组件结构整洁。

下一期预告

下一篇教程将把 Figma 相关内容再推进一步,讲解如何基于 Figma 设计系统在 ProtoPie 团队库中创建可复用组件。这样,团队中的一位成员可以在 Figma 中进行更改、更新 ProtoPie 库,然后所有基于该库构建的 pies 都能适配新的设计系统,而无需任何重新编码。

这份深度指南由 David Gilmore(UX 设计总监与顾问)创作。