在第 1 部分中,你已经学会了如何使用 Formula 将文本拼接在一起。现在我们将更深入一些,进行更复杂的计算。
你需要准备什么
要跟着本教程操作,请下载这个示例 Pie,并在 Studio 中打开它。
你将学到什么
在本教程结束时,你将学会:
如何创建一个用于执行数学计算的 Formula
Functions(函数)入门
完成时间:≤15 分钟
从文本到数学计算
使用同一个 Pie,打开 Scene 3 - Calculate。这个 Scene 有两个输入字段和四个按钮。我们希望用户在每个字段中输入一个数字,然后选择他们想执行的计算——在我们的例子中是加法、减法、乘法或除法。我们将让 Pie 执行所需计算,并在按钮下方显示结果。
给 Add Layer 添加一个 Tap Trigger。

给 Result Layer 添加一个 Text Response。

由于我们再次处理尚未知晓的输入值,我们需要使用 Formula。在 Content. 下方的下拉菜单中选择 Formula。
点击它下方的输入框,你会看到熟悉的 ∫x 图标。点击它以展开 Formula 输入框。
和之前一样,点击出现在 Formula 框右侧附近的 ⊕ 图标,并选择
Number 1layer。

我们希望访问这个 layer 的
text属性。输入点号.以显示Number 1Layer 的所有属性。向下滚动并选择 text. 输入+来告诉 ProtoPie 你要做加法。再次点击 ⊕ 图标,这次选择Number 2layer。输入.并选择text属性。

点击 OK 以提交你的 Formula。
让我们来 Preview。分别在两个输入字段中输入数字,然后点击 + 操作按钮。

这……没成功,对吧?ProtoPie 没有把两个数字相加并给出总和,而是把两个数字拼接在了一起。在我的示例中,5 + 6 得到的是 56,而不是 11!
为什么会这样?
如果你还记得第 1 部分,在 Formula 中,+ 字符用于告诉 ProtoPie 你想把一些文本拼接在一起。令人困惑的是,当你想进行两个数字的算术相加时,它也会被使用。ProtoPie 会智能地猜测你想执行哪种操作,但在这个例子里 ProtoPie 猜错了。正如名称所示,ProtoPie 将 Number 1 和 Number 2 字段的 text 属性当作文本而不是数字,因此它认为你是在尝试拼接两段文本。
我们可以通过明确告诉 ProtoPie 应该如何处理这些 text 属性来修复这个问题。我们可以使用一种叫做 Function(函数)的东西来做到这一点。Function 是“预定义指令集”的高级说法。我们需要的是一个能告诉 ProtoPie:这些 text 属性应被当作数字处理的函数。
点击 ∫x 图标来修改你的 formula。点击 Formula 输入框右端的
?图标,在浏览器中打开 Formula 文档。

在左侧面板中导航到 Formulas → Functions。

这些是 ProtoPie 中所有可用的 Functions。完成本教程后,花点时间探索一下你可以在 Formula 中使用的所有函数。
向下滚动到 Type Conversion(类型转换)部分,找到
number(source:TEXT)函数。

所有函数都有类似的格式:
函数名称,这里是
number你提供给函数作为输入的一个或多个参数,括在括号中(例如
(source:TEXT))。这表示该函数接收一个参数,并且这个参数必须是文本格式。如果函数接收多个参数,它们会用逗号分隔(例如format(value:NUMBER,format:TEXT)接收两个参数:一个数字和一段文本)。函数执行后返回的信息类型(例如
-> NUMBER)。
因为我们当前是文本,并且希望将其转换为数字,这个函数正好满足需求!它接收文本,并将其转换为数字。

按这种方式修改你的 formula。
让我们再 Preview 一次,看看它是否修复了我们的问题。

成功!
现在我们只需要为剩余按钮创建类似的交互。你可以走“慢方法”把上面的步骤全部再做一遍,但更快的方法是复制我们已经做好的内容,然后针对具体动作进行修改。
点击 Tap trigger 以选中它。右键并选择 Duplicate。
💡 专业提示:Mac 上使用 cmd + D,Windows 上使用 ctrl + D,效果相同。

继续之前,我们现在有两个同名的 Tap Triggers。让我们重命名它们,便于理解。双击 Trigger 的标签,将第一个改名为 Tap Add,第二个改名为 Tap Subtract。

现在让我们修改复制出来的 Trigger,使其用于 Subtract 按钮并执行减法操作。
点击 Tap Subtract Trigger 以选中它,并将其重新关联到 Subtract Layer。

点击其下方的 Text Response,并将 formula 从加法改为减法。把
+字符改成-

再做两次,分别用于乘法和除法操作。到这里你可能已经意识到,键盘上没有乘号和除号。程序员很早以前就用 * 表示乘法,用 / 表示除法。你的 Formulas 应分别如下所示:

Formula:乘法

Formula:除法
如果你现在进行 Preview,你应该可以对数字执行这四种操作。即使你把数字换成其他值,计算依然有效。这就是使用 Formulas 的威力!
关于空白字符的说明
在上面的 formulas 中,我们没有在运算符两侧添加空格(+、-、* 和 / 都叫做 operators)。当公式变得更复杂时,这会让它们更难阅读。把这样的公式改写为更易读的形式是完全没问题的:

像这样(注意 * 字符两侧的空格):

两者的效果完全相同,但第二种更容易阅读。实际上,你还可以在很多其他位置添加空白字符。比如下面这样也没问题:

ProtoPie 甚至足够智能,能够理解你这样写的意思:

不过,有几个地方空白字符确实会有影响。我们已经讲过 "Hello," 和 "Hello, " 的区别。另外,如果你这样做:

ProtoPie 就不会接受。变量名中不能有空格。ProtoPie 会把它理解为你在尝试使用三个不同的变量,而这些变量都找不到。ProtoPie 会用红色波浪线标出问题区域来帮助你。每当 Formula 出问题时,先检查红色波浪下划线是个很好的起点。
“就是这样!就像 " + Type of Pie``.text + " Pie!" 一样简单!”
你现在应该已经很好地掌握了如何使用 formulas 让你的 Pies 变得极其逼真。你不必局限于静态值,因为在 ProtoPie 几乎任何地方都可以使用 Formula——只要寻找 ∫x 图标。花点时间探索你可以如何使用 Formulas,让你的体验更上一层楼!
相关内容
使用 Long Press 和 Formulas 创建可展开图片叠层 本教程将教你如何使用相关的 ProtoPie formulas 和 triggers 创建可展开的图片预览。
使用 ProtoPie 的 Formula 功能制作输入步进器原型 学习如何轻松使用 ProtoPie 制作输入步进器原型。我们将完整演示实现它所需的所有元素、formulas 和 conditions。
创建一个可随滚动响应的粘性页头的最简单方法 想根据滚动方向显示或隐藏应用页头吗?这里将告诉你如何使用一个简单的 condition 和 formula 来实现。





