我正在学习如何使用C4框架并尝试将手势添加到形状中,但我似乎无法弄清楚如何让它们做任何事情。当我尝试在点击按钮后更改按钮的位置时,以下方法会产生错误。
[buttonA addGesture:TAP name:@"tapGesture" action:@"setPosition"];
这是我得到的错误: * 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [MyButton setPosition]:无法识别的选择器发送到实例0x7661b60'
答案 0 :(得分:3)
我猜你得到错误的原因是因为setPosition方法是因为你试图直接在C4Shape对象上运行setPosition
方法。在本地,C4Shapes没有这种方法。
在C4中,所有对象都可以附加手势,但是当您在对象上触发手势时,为了运行任何自定义代码,您应首先将C4Shape子类化并编写一个特殊方法来处理您想要查看的行为。 / p>
例如,我会像这样创建一个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
方法。
答案 1 :(得分:1)
为了让手势“发送”你想要完成的动作,你需要为类“myButton”设置一个名为“setPositon”的方法。您是否在代码中调用了此方法?