さて、これを行う最も簡単な方法は、C4Shape内で呼び出されている正しいメソッドをリッスンするようにキャンバスを設定することです(実際には、任意のC4Controlからのものであるため、この手法はすべてのビジュアルオブジェクトで機能します。
- まず、シェイプを作成してキャンバスに追加します。
- シェイプにジェスチャーを追加して、適切な
swipe
メソッドをトリガーします
notification
形から聞くようにキャンバスに指示します
- キャンバスが通知を聞いたら、何かをします(つまり、形状の色を変更します)
次のコードは形状を設定します。
@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;