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 に答える