我宣布:
CCSprite + DisableTouch.h文件
#import "cocos2d.h"
@interface CCSprite (DisableTouch) <CCTargetedTouchDelegate> {
}
-(void)disableTouch;
-(void)enableTouch;
@end
对于CCSprite + DisableTouch.m文件
#import "CCSprite+DisableTouch.h"
@implementation CCSprite (DisableTouch)
-(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
return YES;
}
-(void)disableTouch
{
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:-1000 swallowsTouches:YES];
}
-(void)enableTouch
{
[[CCTouchDispatcher sharedDispatcher] removeDelegate:self];
}
@end
为什么我得到:Expected identifier or '(' before '{' token
错误?
我该如何解决这个问题?
答案 0 :(得分:6)
错误是添加{
&amp;您的类别中包含}
个字符,因为类别不能包含iVar。
如果您的类别需要iVar,请考虑使用相关对象:
#import <objc/runtime.h>
...
objc_setAssociatedObject(self, @"iVar", @"value", OBJC_ASSOCIATION_ASSIGN);
...
id iVar = objc_getAssociatedObject(self, @"iVar");
有关关联对象的更多信息,请查看here。
答案 1 :(得分:1)
理查德说;您无法在类别中添加iVars,这是编译器警告/错误的来源。
但是,这里有一些更微妙的东西。
如果要覆盖CCSprite的行为,则应使用子类,而不是类别。通过使用类别,您将改变应用程序中所有CCSprite的行为,这不太可能是您想要的行为(问问自己;如果您的程序有一个使用了一些不符合要求的UI元素会发生什么? the-box cocos2d - 或第三方 - 依赖于现有CCSprite触摸行为的UI?)