2013-03-08 54 views
2

什么我希望做到的,是通过调用在C4Workspace.m的方法:如何使用[object addGesture ...]从C4Workspace调用方法?

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

我知道,这个试图调用一个名为“leftSwipeMethod”的C4Shape类中的方法,但在文档中它还提到你可以调用超类的方法(这正是我想要做的事情?)。

我检查了这样的其他问题,我知道你不应该这样做在正常的目标C ......但我不知道这是否与C4的情况一样。

有没有其他方法可以得到相同的结果,还是我必须创建一个子类?

+0

取决于...你想从里面的造型触发这个?或者,从工作区本身? – 2013-03-08 03:48:25

+1

@ C4-Travis我不太确定如何说出我想要的东西。当我在形状上做一个滑动手势(不是画布)时,我想让该方法运行。 – 2013-03-08 04:01:23

+0

好的,所以你在形状上运行手势,然后:A)在形状内触发一个方法?或B)在画布上触发一个方法? – 2013-03-08 04:41:56

回答

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 

然而,这是硬编码...一个更好的,更具活力的做的方式这是从很多对象收听,并有一个方法也接受通知,以便您可以拉出正在进行通知的形状。

@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 

相近的第二个例子说明:

首先,接受通知,该方法的运行必须有以下格式:

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

其次,触发此方法您使用的名称listenFor已将设置为:,如下所示:

@"randomColor:" 

第三,你抢,只是从它发出的通知,拉它收到轻扫手势对象:

C4Shape *shape = (C4Shape *)notification.object; 
+1

好吧,那太好了。谢谢。如果我想为每个滑动方向指定一种特定的颜色,是否可以只使用一种方法并以某种方式将滑动的方向传递给该方法(有点像您通过哪个对象发送通知)?我有点想象像和RunMethod:@“changeColor:”withString:@“(它被滑过的方向)”或类似的东西... 或者我只需要为每个滑动方向编写一个单独的方法? – 2013-03-09 01:03:59

+0

你在正确的轨道上。但是,通常情况下,当您在跟踪手势时最好在对象或对象/控制器对中使用它们。所以,你想要做跟踪并处理同一对象内部的行为(基本上)。对于你正在谈论的技术,如果你想从画布中处理它,为了简单起见,你可以为每个... swipeLeftRandomColor编写单独的方法:或类似的东西。这样做没有太多的开销。 – 2013-03-09 06:51:49