У меня была эта проблема сегодня утром с Cocos2D v1.0.0. Мое решение состояло в том, чтобы включить вызов метода CCTouchDispatcher внутри моего метода init для слоя, а затем этот слой, внутри UIView, распознал бы прикосновения.
-(id) init
{
if ((self = [super init]) != nil) {
// do stuff
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
}
return self;
}
-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
CGPoint location = [self convertToNodeSpace:[[CCDirector sharedDirector] convertToGL:[touch locationInView:[touch view]]]];
NSLog(@"TouchBegan at x:%0.2f, y:%0.2f", location.x, location.y);
return YES;
}
Альтернативным решением будет использование метода ccTouchesBegan:
-(id) init
{
if ((self = [super init]) != nil) {
// do stuff
self.isTouchEnabled = YES;
}
return self;
}
-(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
for (UITouch *thisTouch in touches) {
CGPoint location = [self convertToNodeSpace:[[CCDirector sharedDirector] convertToGL:[thisTouch locationInView:[thisTouch view]]]];
NSLog(@"TouchesBegan at x:%0.2f, y:%0.2f", location.x, location.y);
}
}
Обратите внимание, что два сенсорных метода имеют разные методы, чтобы ваше приложение знало, что оно должно реагировать на прикосновения. Вы не можете смешивать и сопоставлять то, как вы хотите реагировать на прикосновения, и какие прикосновения вы хотите наблюдать.