2012-04-19 105 views
4

我剛學習如何使用C4框架並嘗試將手勢添加到形狀,但似乎無法弄清楚如何讓它們做任何事情。下面的方法創建一個錯誤,當我嘗試改變一個按鈕的位置後,它是輕拍。將手勢添加到形狀 - c4framework

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

這是錯誤我得到:*終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因是: ' - [myButton的setPosition兩種]:無法識別的選擇發送到實例0x7661b60'

回答

3

我猜你得到錯誤的原因是因爲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

+0

剛試過這個,它不起作用。在ios模擬器中,我看到的只是一個空白屏幕。 – jamesco 2012-04-19 17:00:21

+0

嘿,對不起,我寫了,沒有測試它......我更新了上面的答案中的代碼,我測試了它,它在我的模擬器中工作。 – 2012-04-19 17:03:59

+0

也適用於我的模擬器!謝謝 – jamesco 2012-04-19 17:05:40

1

爲了「發送」你正在嘗試完成的動作的手勢,你需要爲類「myButton」命名一個名爲「setPositon」的方法。你有沒有在你的代碼中調用這個方法?