2

私が達成したいと思っているのは、次を使用してC4Workspace.mのメソッドを呼び出すことです。

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

これがC4Shapeクラス内で「leftSwipeMethod」と呼ばれるメソッドを呼び出そうとしていることは知っていますが、ドキュメントには、スーパークラスからメソッドを呼び出すことができることも記載されています(これは私がやろうとしていることですか?)。

私はこのような他の質問をチェックしました、そしてあなたが通常のObjective-cでこれをすることになっていないことを知っています...しかしそれはC4にも当てはまるのだろうかと思います。

同じ結果を得る他の方法はありますか、それともサブクラスを作成する必要がありますか?

4

1 に答える 1

2

さて、これを行う最も簡単な方法は、C4Shape内で呼び出されている正しいメソッドをリッスンするようにキャンバスを設定することです(実際には、任意のC4Controlからのものであるため、この手法はすべてのビジュアルオブジェクトで機能します。

  1. まず、シェイプを作成してキャンバスに追加します。
  2. シェイプにジェスチャーを追加して、適切なswipeメソッドをトリガーします
  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

2番目の例で注意すべき点:

まず、通知を受け入れるには、実行するメソッドの形式が次のとおりである必要があります。

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

次に、これをトリガーするには、で使用するメソッド名が次listenFor :ようになっている必要があります。

@"randomColor:" 

3番目に、スワイプジェスチャを受信したばかりのオブジェクトを、送信した通知からプルして取得します。

C4Shape *shape = (C4Shape *)notification.object;
于 2013-03-08T23:58:40.490 に答える