4

我只是在学习如何使用 C4 框架并尝试向形状添加手势,但我似乎无法弄清楚如何让它们做任何事情。当我在点击按钮后尝试更改按钮的位置时,以下方法会产生错误。

[buttonA addGesture:TAP name:@"tapGesture" action:@"setPosition"];

这是我得到的错误:*由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[MyButton setPosition]:无法识别的选择器已发送到实例 0x7661b60”

4

2 回答 2

3

我猜你得到错误的原因是因为 setPosition 方法是因为你试图setPosition直接在 C4Shape 对象上运行该方法。C4Shapes 本身没有这种方法。

在 C4 中,所有对象都可以附加手势,但是为了在您触发对象上的手势时运行任何自定义代码,您应该首先继承 C4Shape 并编写一个特殊方法来处理您想要看到的行为。

例如,我会像这样创建一个 MyShape 类:

@interface MyShape : C4Shape
-(void)setNewPosition;
@end

@implementation MyShape
-(void)setNewPosition {
    //will set the center of the shape to a new random point
    self.center = CGPointMake([C4Math randomInt:768], [C4Math randomInt:1024]);
}
@end

然后,在我的 C4WorkSpace 中:

#import "C4WorkSpace.h"
#import "MyShape.h"

@implementation C4WorkSpace {
    MyShape *newShape;
}
-(void)setup {
    newShape = [MyShape new];
    [newShape ellipse:CGRectMake(100, 100, 200, 200)];
    [newShape addGesture:TAP name:@"tapGesture" action:@"setNewPosition"];
    [self.canvas addShape:newShape];
}
@end

这应该使用新的子类形状注册一个轻击手势,并在setNewPosition触发手势时运行其方法。

于 2012-04-19T16:53:56.747 回答
1

为了让手势“发送”您尝试完成的操作,您需要为“myButton”类提供一个名为“setPositon”的方法。您的代码中是否调用了此方法?

于 2012-04-19T15:50:07.173 回答