1

我在 C4 应用程序的画布上添加了 42 个形状。如何确定用户触摸了哪个形状?

我添加的形状如下:

#import "C4Workspace.h"

@implementation C4WorkSpace{
    C4Shape *greyRect;
}

-(void)setup {
    int imageWidth=53.53;
    int imageHeight=65.1;
    for (int i=0; i<42; i++) {
        int xMultiplier=(i)%6;
        int yMultiplier= (i)/6;
        int xPos=xMultiplier*imageWidth;
        int yPos=yMultiplier*imageHeight;
        greyRect=[C4Shape rect:CGRectMake(xPos, yPos, imageWidth, imageHeight)];
        greyRect.fillColor=[UIColor colorWithRed:0 green:0 blue:0 alpha:0];
        greyRect.lineWidth=2;
        greyRect.strokeColor=[UIColor colorWithRed:0.7 green:0 blue:0 alpha:1];
        [self listenFor:@"touchesBegan" fromObject:greyRect andRunMethod:@"highlightLetter"];

        [self.canvas addShape:greyRect];
    }
}

-(void)highlightLetter{
    C4Log(@"highlightLetter");
}

@end

我几乎只需要知道点击的矩形有哪个数字[i]。

但我不知道在运行线路后如何访问它:[self listenFor:@"touchesBegan" fromObject:greyRect andRunMethod:@"highlightLetter"];

有什么建议么?

4

1 回答 1

1

看看谁说了什么?C4 网站上的通知教程的一部分。

通知教程的这一部分解释了如何对给定对象的通知做出反应,并实际找出哪个对象刚刚广播了该通知。

诀窍在于构建一个接受通知的方法:

-(void)highlightLetter:(NSNotification *)notification {
    C4Shape *shape = (C4Shape *)notification.object;
    //do stuff to the shape
}

另外,请记住,因为该方法需要一个 变量,所以您必须:在方法的名称中包含 ,如下所示:

[self listenFor:@"touchesBegan" 
     fromObject:greyRect 
   andRunMethod:@"highlightLetter:"];
于 2013-10-23T18:50:23.350 回答