RevolutionRoboticsBlockly 0.3.2

RevolutionRoboticsBlockly 0.3.2

Áron Pável 维护。



  • Mate Papp 和 Gabor Nagy Farkas

Revolution Robotics Blockly Code Editor iOS SDK

Build Version License support Swift

介绍

Revolution Robotics Blockly 基于 Google 的开源 Blockly 库,它将编码概念呈现为相互锁定的方块,并将这些方块转换为语法正确的源代码。

这个库允许您嵌入专门为 Revolution Robotics 机器人定制的 Blockly 编码接口。它包含许多自定义模块,使您能够编程机器人并利用它们的所有功能。在内部,它在 WebView 中包装了 官方 Blockly JavaScript 库,并创建了 WebView 与原生代码之间的通信桥。

要求

  • iOS 11.0+
  • Swift 5.0+
  • Xcode 10.2+

安装

RevolutionRoboticsBlockly 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中

pod 'RevolutionRoboticsBlockly'

示例

要运行示例项目,请克隆存储库,并首先从示例目录运行 pod install

BlocklyViewController

Robotics Blockly iOS SDK 的核心是 BlocklyViewController,它是 UIViewController 子类,封装了 blockly 编辑器的所有功能。您可以将此视图嵌入到布局中,就像使用任何 UIViewController 一样,无论是从 Scene Builder、XIB 还是从代码中。

方法

BlocklyViewController 提供了一些功能来操作其内容

func setup(blocklyBridgeDelegate: BlocklyBridgeDelegate)

如果您想从 BlocklyViewController 接收事件,必须通过调用 viewController 的 setup 方法和符合 BlocklyBridgeDelegate 协议。

func saveProgram()

保存工作区的内容。程序保存的结果将触发三个不同的 BlocklyBridgeDelegate 方法。

  • onVariablesExported(variables: String)
  • onPythonProgramSaved(pythonCode: String)
  • onXMLProgramSaved(xmlCode: String)
func loadProgram(xml: String)

将 blockly XML 文件字符串的内容加载到工作区。

func clearWorkspace()

从工作区中删除所有块。

BlocklyBridgeDelegate

许多 Blockly 功能,主要是一些代码块,需要用户输入。通信是通过对话框完成的。为了使对话框的外观完全可自定义,您必须提供 UI,而框架通过相应的 delegate 方法回调来处理响应。例如,在创建变量时,Blockly 将弹出文本输入对话框,用户提供变量名,然后通过回调块将提供的名称传递回编辑器。

每个事件处理方法都有一个回调块,该块接收所需响应类型(大多数情况下为 String)或 nil 如果要取消事件。这两个结果中的任何一个都必须被调用,因为 BlocklyViewController 在其中一个被调用之前将被阻塞。**警告**!如果您不使用回调,程序将崩溃。

方法

BlocklyBridgeDelegate具有以下方法来显示模态或处理事件

func alert(message: String, callback: (() -> Void)?)

向用户显示带有消息的警告。调用回调意味着您已接受警告。

func confirm(message: String, callback: ((Bool) -> Void)?)

让用户通过消息确认一个操作。回调接收truefalse,指示确认的结果。

func optionSelector(_ optionSelector: OptionSelector, callback: ((String?) -> Void)?)

向用户显示自定义选项。可选项以数组形式提供,从2到6个。如适用,提供默认选择。回调接收nil或选定的选项的key

func driveDirectionSelector(_ optionSelector: OptionSelector, callback: ((String?) -> Void)?)

向用户显示一个驱动方向选择器模态。如适用,提供默认选择。回调接收nil或选定的方向选项的key

func colorSelector(_ optionSelector: OptionSelector, callback: ((String?) -> Void)?)

向用户显示一个选择器,用户可以选择指定的颜色集。如适用,提供默认值。回调接收nil或选定的颜色选项的key

func audioSelector(_ optionSelector: OptionSelector, callback: ((String?) -> Void)?)

向用户显示一个音效选择器。这将在机器人上显示所有可用的音效文件。如适用,提供默认值。回调接收nil或选定的音效选项的key

func sliderHandler(_ sliderHandler: SliderHandler, callback: ((String?) -> Void)?)

显示一个带有滑块的模态,用户可以输入一个数字。如适用,提供默认、最小和最大值。回调接收nil或所选值作为String

func singleLEDInput(_ inputHandler: InputHandler, callback: ((String?) -> Void)?)
func multiLEDInput(_ inputHandler: InputHandler, callback: ((String?) -> Void)?)

向用户显示LED选择器,最好是圆形,模拟机器人的LED显示屏(因此得名,“甜甜圈选择器”)。有两种LED选择类型,单选(用户可以选择单个LED)和多选(用户可以选择任意数量的LED)。如适用,提供默认选择。回调接收nil或在以下情况中

  • 单LED:选定的LED位置(从1到12)作为一个String
  • 多LED:选定的LED位置(从1到12)以逗号分隔作为一个String。(示例:"3,5,7"
func numberInput(_ inputHandler: InputHandler, callback: ((String?) -> Void)?)

显示一个数字输入模态,用户可以输入浮点值。如适用,提供默认值。回调接收nil或作为String的数字。

func textInput(_ inputHandler: InputHandler, callback: ((String?) -> Void)?)

向用户显示文本输入。如适用,提供默认值。回调接收nil或文本。

func variableContext(_ optionSelector: OptionSelector, callback: ((VariableContextAction?) -> Void)?)

向用户显示变量上下文模态,用户可以切换变量到另一个,或删除一个变量。回调接收nil删除变量操作DeleteVariableAction(payload: String)设置变量操作SetVariableAction(payload: String),其有效载荷是您想要删除或设置的相关的变量。

func blockContext(_ contextHandler: BlockContextHandler, callback: ((BlockContextAction?) -> Void)?)

向用户显示块选项对话框,其中用户可以在给定的块中添加评论、删除它、复制它或获得有关它的帮助。回调接收nil或来自DuplicateBlockAction()HelpAction()DeleteBlockAction()添加评论操作AddCommentAction(payload: String)的动作,其有效载荷是评论的文本。

func onVariablesExported(variables: String)

导出在源中用作端口的全部变量,这样您可以确定哪些程序与哪些配置兼容(该配置应具有所有变量名称作为端口号定义以被认为是兼容的)。

func onPythonProgramSaved(pythonCode: String)

导出生成的Python代码,它包含在编辑器中组装的程序的语法正确的源代码。此Python代码可以上传并在机器上运行。

func onXMLProgramSaved(xmlCode: String)

导出表示Blockly工作区当前状态的XML。这可以用于稍后重新加载程序到工作区。

func onBlocklyLoaded()

当Blockly成功加载到WebView中时接收事件。

作者

Mate Papp [email protected]

许可证

RevolutionRoboticsBlockly遵循MIT许可证。有关更多信息,请参阅LICENSE文件。