如何使用 [object addGesture...] 从 C4Workspace 调用方法?

2024-02-10

我希望实现的是使用以下方法调用 C4Workspace.m 中的方法:

[shape addGesture:SWIPELEFT name:@"swipeLeft" action:@"leftSwipeMethod"];

我知道这会尝试在 C4Shape 类中调用名为“leftSwipeMethod”的方法,但在文档中它还提到您可以从超类中调用方法(这就是我认为我正在尝试做的事情?)。

我检查了类似这样的其他问题,我知道你不应该在正常的 Objective-C 中这样做......但我想知道 C4 是否也是如此。

有没有其他方法可以获得相同的结果,或者我是否必须创建一个子类?


好的,最简单的方法是设置画布以侦听 C4Shape 内部调用的正确方法(实际上,它来自任何 C4Control,因此该技术适用于所有视觉对象。

  1. 首先,创建一个形状并将其添加到画布上。
  2. 向形状添加手势,触发相应的操作swipe method
  3. 告诉画布监听notification从形状上
  4. 当画布听到通知时执行某些操作(即更改形状的颜色)

以下代码设置形状:

@implementation C4WorkSpace {
    C4Shape *s;
}

-(void)setup {
    s = [C4Shape rect:CGRectMake(0, 0, 192, 96)];
    s.center = self.canvas.center;
    [s addGesture:SWIPELEFT name:@"leftSwipeGesture" action:@"swipedLeft"];
    [self.canvas addShape:s];

    [self listenFor:@"swipedLeft" fromObject:s andRunMethod:@"randomColor"];
}

-(void)randomColor {
    s.fillColor = [UIColor colorWithRed:[C4Math randomInt:100]/100.0f
                                  green:[C4Math randomInt:100]/100.0f
                                   blue:[C4Math randomInt:100]/100.0f
                                  alpha:1.0f];
}
@end

然而,这是硬编码的......一个更好、更动态的方法是监听大量对象并有一个randomColor:方法也接受通知,以便您可以拉出正在执行通知的形状。

@implementation C4WorkSpace {
    C4Shape *s1, *s2;
}

-(void)setup {
    s1 = [C4Shape rect:CGRectMake(0, 0, 192, 96)];
    [s1 addGesture:SWIPELEFT name:@"leftSwipeGesture" action:@"swipedLeft"];

    s2 = [C4Shape rect:CGRectMake(0, 0, 192, 96)];
    [s2 addGesture:SWIPELEFT name:@"left" action:@"swipedLeft"];

    s1.center = CGPointMake(self.canvas.center.x, self.canvas.center.y - s1.height * 1.25);
    s2.center = CGPointMake(self.canvas.center.x, self.canvas.center.y + s2.height * 0.25);

    NSArray *shapes = @[s1,s2];
    [self.canvas addObjects:shapes];

    [self listenFor:@"swipedLeft" fromObjects:shapes andRunMethod:@"randomColor:"];
}

-(void)randomColor:(NSNotification *)notification {
    C4Shape *shape = (C4Shape *)notification.object;
    shape.fillColor = [UIColor colorWithRed:[C4Math randomInt:100]/100.0f
                                      green:[C4Math randomInt:100]/100.0f
                                       blue:[C4Math randomInt:100]/100.0f
                                      alpha:1.0f];
}
@end

第二个例子中需要注意的事项:

首先,要接受通知,正在运行的方法必须具有以下格式:

-(void)randomColor:(NSNotification *)notification {}

其次,要触发此方法,请使用您使用的方法名称listenFor has有一个:像这样:

@"randomColor:" 

第三,通过从发送的通知中拉出刚刚收到滑动手势的对象来获取它:

C4Shape *shape = (C4Shape *)notification.object;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 [object addGesture...] 从 C4Workspace 调用方法? 的相关文章

  • Node+Passport.js + Sessions + 多个服务器

    护照很棒 我现在发现它处理会话的方式存在一些问题 一定是我用错了 登录 会话 我存储在数据库中的用户数据对我来说一切都很顺利 然而 我发现当我转移到生产环境 具有多个服务器的 EC2 上的云 时 我每次都会丢失登录会话 现在我很清楚这一点
  • 用于多个 Semantic UI 主题的 Semantic UI 主题构建器,支持 Font Awesome 类名和原始 Semantic UI React 文档演示

    我是 Semantic UI 的忠实粉丝 尤其是 Semantic UI React 的忠实粉丝 除了它们是优秀的库之外 它们的文档也很棒 然而 为其组件编写和维护主题可能很麻烦 编写 构建和维护多个主题变得更加困难 所以问题是 如何编写
  • 使用密码加密/解密字符串 C# Metro 风格

    我想用密码加密和解密字符串 我使用 C 和 WinRT MetroStyle 有人有加密 解密课程吗 Metro 中不存在普通的 Net System Security Cryptography 命名空间 您使用密码引擎 http msdn
  • Angular 6 材质垫选择更改方法已删除

    在 Angular Material Design 6 中 删除了 change 方法 当用户更改选择时 我应该如何替换更改方法以在组件中执行代码 改变它从change to selectionChange
  • 根据 CSV 中的值创建文件夹

    我正在开发一个更大的脚本解决方案的一小部分 其中我需要根据 CSV 中存储的值创建文件夹 然后根据 csv 列中的值将适用的文件移动到新文件夹中 CSV 的格式 fileName folder AC002 Y AC034 Y AC001 X
  • 在文档中添加新元素后,jQuery 显示不起作用

    我正在使用 Ajax Request 将元素加载到 div 容器中 默认情况下我隐藏一个输入框 如果用户单击该 div 上的编辑图标 我想显示输入框 这是我的代码 HTML代码 div class container div
  • 如何将mysql结果集分布在4个数组的多维数组中

    我对这个简直要疯了 花了近 4 个小时试图弄清楚 但没有成功 我正在尝试获取 4 个数组的多维数组中的 mysql 查询结果集 因此 如果结果集返回 8 条记录 则该数组将包含 4 个每组 2 条记录的数组 如果结果集返回 20 条记录 则
  • Chrome/Webkit 音频标签错误?

    我正在尝试让 HTML5 的音频标签在 Chrome 中工作 以下代码在 Firefox 中可以完美运行 您知道为什么它在 Webkit 中无法运行吗 我还应该指出 我也用 mp3 尝试过此操作 无论什么格式 每当对音频调用 play 时
  • 快速创建 BouncyCastle SecureRandom 实例是否有问题?

    如所述随机数生成器仅生成一个随机数 https stackoverflow com q 767999 1709587 创建一个新实例通常是不正确的System Random每次你需要另一个随机数时 因为System Random是根据时钟播
  • VSCODE 精确的按键绑定,想知道当前的上下文。怎么做?

    许多插件可以通过未记录的 API 设置自己的特定 上下文 设置上下文 由于文档没有列出这些自定义上下文 因此我不能只查看文档来了解如何以正确的方式配置我自己的键绑定 是否有可能知道当前环境 array 例如 我想使用键盘快捷键 没有鼠标 导
  • 我需要一个 Python 类来跟踪它被实例化的次数

    我需要一个像这样工作的类 gt gt gt a Foo gt gt gt b Foo gt gt gt c Foo gt gt gt c i 3 这是我的尝试 class Foo object i 0 def init self Foo i
  • Visual Basic 2010 HTTP POST 请求

    如何将 POST HTTP 请求发送到服务器 在 Visual Basic 2010 中 然后接收字符串回复 您可以通过 HttpWebRequest 来完成此操作 只需设置HttpWebRequest Method http msdn m
  • 通过字符串从枚举获取 Case

    我寻找一个简单的解决方案来通过字符串获取枚举的情况 有 BackedEnums 例如
  • 如何在向量的每个值之间写入逗号?

    我想将向量导出到文件中 每个值之间用逗号分隔 我尝试过使用paste with sep 但它不起作用 有谁知道为什么 gt x lt rnorm 10 gt paste x sep 1 1 08574649988891 2 95803811
  • C 中如何解析链接宏?

    如果我想使用预处理器 define语句可以轻松定义和计算常量和常用函数 并利用较少的 RAM 开销 与使用const值 但是 我不确定如果同时使用多个宏 它们将如何解决 我正在设计自己的DateTime代码处理 类似于 Linux 时间戳
  • 为 Python 3.x 编译 zbar

    几年前 我花了一些时间寻找一种方法zbar使用 Python 2 7 Windows x64 我发布了这个工作解决方案 如何在 最好是纯 Python 中解码 QR 码图像 https stackoverflow com questions
  • 单击模式框时按钮没有被触发

    Assign a Textbox Value to the modal box on the same page已答复 新问题 为什么当我单击按钮时模式框上的按钮没有被触发 我错过了什么吗 我添加了代码来处理服务器端的点击事件 Protec
  • 如何让元素在容器内浮动

    我想把 container在屏幕中央并制作 图表 float left在 的里面 container 但是使用下面的代码 图表 位于 container 谁能告诉我如何更改代码 并告诉我为什么代码将 图表 放在 container cont

随机推荐

  • 什么是 virtualenv,为什么我应该使用它?

    我正在尝试使用此命令安装 Python 包 pip install
  • 如何使用selenium java在mozilla firefox上使用假网络摄像头

    我正在尝试自动化一个包含网络摄像头流的网站 为了使其自动化 我需要某种方法来伪造网络摄像头 我知道这个选项 use fake device for media stream在 Chrome 中模拟网络摄像头 这在 Chrome 中对我有用
  • jqGrid 和动态分组

    我正在对 jqGrid 进行一些动态分组 按照以下位置发布的示例 http www trirand com blog jqgrid jqgrid html http www trirand com blog jqgrid jqgrid ht
  • 服务器是否可以同时收到两个请求? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我对服务器如何处理数千个请求有点困惑 我想如果有数千个请求 最终其中两个请求必须同时到达服务器 如果两条消息同时到达它 它只能处理一条 对
  • PHP:使用 preg_match 获取 url 变量?

    http www example com id 05 or http www example com id 05 name johnny 这是一个字符串 我想得到的值 id从中 它的正确模式是什么 您不需要正则表达式 除非您有充分的理由 否
  • 防止 HttpClient 4 遵循重定向

    我正在使用 Apache HttpComponents 库连接到我的 AppEngine 应用程序 为了对我的用户进行身份验证 我需要将身份验证令牌传递到应用程序的登录地址 http myapp appspot com ah login a
  • 下载大文件 - iPhone SDK

    我正在使用 Erica Sadun 的异步下载方法 项目文件的链接位于此处 download http uhelios com downloaderica zip 但是她的方法不适用于大尺寸 50 mb 或以上 的文件 如果我尝试下载超过
  • 如何访问组件中 FormArray 中定义的 HTML 中的控件 - Angular2

    我在用ReactiveFroms在我的应用程序中 当我添加static控制然后一切都工作正常 我正在展示validation使用错误inbuilt类的controls 在职的Plunkr https plnkr co edit AZ5Jgw
  • 如何注册私有 DICOM 标签?

    我想知道公司 例如飞利浦或西门子 如何注册私有 DICOM 标签 I mean 如何保证DICOM组不被其他厂家占用 假设飞利浦选择了标签 1111 00xx 那么它需要知道组 1111 尚未被占用 之后NEMA还需要参与吗 或者有其他组织
  • 无法在 android 中添加 addView

    我需要朋友们的帮助 这是我的活动 public class MainActivity extends Activity float values 700 400 100 500 600 float values1 70 40 10 50 O
  • System.IO.Packaging:无法确定域的身份

    我正在使用 System IO Packaging 在完全托管的桌面 Windows 窗体 应用程序中创建文件 在一定条件下 OPC包的写入会引发 无法确定域的身份 例外 我了解到它与独立存储有关 因为打包 API 有时会在那里创建临时数据
  • 如何使用引导行和列增加文本区域的高度

    我设计了一个表单 其中连续有两个项目 如下所示 我的输出 Code我用过的 div class row div class col sm 3 fieldset class form group fieldset div div
  • 计算unix日志文件中两个时间段之间的行数[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Log file
  • 如何创建一个从 goroutine 接收多个返回值的通道

    我在 Go 中有一个返回两个值的函数 我想将其作为 goroutine 运行 但我无法弄清楚创建接收两个值的通道的语法 有人能指出我正确的方向吗 定义一个包含两个值字段的自定义类型 然后创建一个chan那种类型的 编辑 我还添加了一个使用多
  • 未捕获的类型错误:FB.login 不是函数

    我正在使用 Facebook JavaScript API 创建 Facebook 登录功能并从 API 获取用户详细信息 当我以正常方式使用相同的代码时 我从 Facebook api 获取数据 当我尝试使用 requireJS 做同样的
  • 如何获取当前日期之前的 30 天?

    我有一个开始日历输入框和一个结束日历输入框 我们希望默认开始日历输入框为当前日期之前 30 天 结束日历输入框默认为当前日期 这是我的日期变量 var today new Date dd today getDate mm today get
  • 从资源中读取json文件并在JAVA中将其转换为json字符串

    我在代码中硬编码了这个 JSON 字符串 String json n id 1 n name Headphones n price 1250 0 n tags home green n n 我想将其移至资源文件夹并从那里读取它 我怎样才能在
  • 在 Cocoa 中创建 iTunes 风格源列表时遇到问题

    我正在开发一款可以与 iTunes 风格的源列表配合良好的软件 我一直在网上寻找如何实现它 但所有的例子似乎都有点粗略 我找到了马克 奥尔德里特的执行 http www latenightsw com blog p 29并尝试在我的项目中使
  • CouchDB - 创建或更新文档时触发代码

    我有一个在 CouchDB 中存储数据的页面 该页面直接通过 JavaScript 访问数据库 因此浏览器中没有隐藏太多逻辑 创建新文档时 有一些逻辑将数据元素提取到单独的字段中 以便可以搜索它们 创建或更新文档时是否可以在服务器上执行此逻
  • 如何使用 [object addGesture...] 从 C4Workspace 调用方法?

    我希望实现的是使用以下方法调用 C4Workspace m 中的方法 shape addGesture SWIPELEFT name swipeLeft action leftSwipeMethod 我知道这会尝试在 C4Shape 类中调