Связь между объектами — C4Framework

Я работаю с альфа-версией C4 и пытаюсь отправлять сообщения между объектами, но не могу заставить это работать. Я пытаюсь использовать очень простой пример, но не могу заставить его работать... Я пробовал это:

[ashape listenFor:@"touch" from:anothershape andRunMethod:@"receive"];

но я не получаю никаких сообщений или ничего...

это то, что у меня есть:

#import "MyShape.h"

@implementation MyShape
-(void)receive {
    C4Log(@"this button");
}
@end

person davidpenuela    schedule 23.04.2012    source источник
comment
Привет, Дэвид, 2 вопроса, прежде чем я отвечу: (1) являются ли ashape и othershape объектами класса MyShape? (2) вы пытаетесь заставить один из объектов реагировать при первом прикосновении к другому с помощью метода touchesBegan?   -  person C4 - Travis    schedule 23.04.2012
comment
1) Да 2) Да. Например: если у меня есть квадраты, я хочу изменить цвет второго квадрата, когда я нажимаю на первый, и наоборот.   -  person davidpenuela    schedule 25.04.2012


Ответы (1)


Я вижу одну основную проблему с кодом, который вы разместили.

По умолчанию все видимые объекты в C4 публикуют уведомление touchesBegan при нажатии на них. В вашем коде вы слушаете @"touch", тогда как @"touchesBegan" — это то, что вы должны слушать.

Метод изменения цвета легко реализовать... В вашем файле MyShape.m вы можете использовать такой метод, как:

-(void)changeColor {
    CGFloat red = RGBToFloat([C4Math randomInt:255]);
    CGFloat green = RGBToFloat([C4Math randomInt:255]);
    CGFloat blue = RGBToFloat([C4Math randomInt:255]);

    self.fillColor = [UIColor colorWithRed:red green:green blue:blue alpha:1.0f];
}

Чтобы все работало нормально, ваш C4WorkSpace.m должен выглядеть так:

#import "C4WorkSpace.h"
#import "MyShape.h"

@implementation C4WorkSpace {
    MyShape *s1, *s2;
}

-(void)setup {
    s1 = [MyShape new];
    s2 = [MyShape new];

    [s1 rect:CGRectMake(100, 100, 100, 100)];
    [s2 rect:CGRectMake(300, 100, 100, 100)];

    [s1 listenFor:@"touchesBegan" fromObject:s2 andRunMethod:@"changeColor"];
    [s2 listenFor:@"touchesBegan" fromObject:s1 andRunMethod:@"changeColor"];

    [self.canvas addShape:s1];
    [self.canvas addShape:s2];
}
@end
person C4 - Travis    schedule 24.04.2012