在class1“init”方法(底部代码)中有两个overLapping按钮,但是这两个按钮被添加到(addChild)另一个类(class2)
如果我按下按钮(按钮)。两个按钮是否可以同时响应两个事件?
我希望button1响应class1方法
按钮2到响应class2方法
这样做的好方法是什么?
-(id)initWithPosition:(CGPoint)aPoint Mene:(CCMenu *)menu Fun:(SEL)fun
{
id aTarget = [menu parent];
NSString * imageName = @"light.png";
CCSprite* sprite1 = [CCSprite spriteWithSpriteFrameName:imageName];
CCSprite* sprite2 = [CCSprite spriteWithSpriteFrameName:imageName];
self.flashitemSprite=[CCMenuItemSprite itemWithNormalSprite:sprite1 selectedSprite:sprite2 target:aTarget selector:fun];
sprite1.visible=YES;
_flashitemSprite.position = _flashSprite.position;
[menu addChild:self.flashitemSprite];
CCSprite* sprite3 = [CCSprite spriteWithSpriteFrameName:imageName];
CCSprite* sprite4 = [CCSprite spriteWithSpriteFrameName:imageName];
self.aItemSprite =[CCMenuItemSprite itemWithNormalSprite:sprite3 selectedSprite:sprite4 target:self selector:@selector(distroy)];
sprite3.visible=YES;
_aItemSprite.position = _flashSprite.position;
[menu addChild:self.aItemSprite];
return self;
}
答案 0 :(得分:1)
如果两个按钮100%重叠相同的尺寸,那么你显然不需要两个按钮。只需要一个调用两个动作的按钮,可以使用一个调用另一个方法的动作选择器,也可以实际为一个控制事件分配两个动作选择器。
来自Apple的UIControl文档 - (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents方法:
您可以多次调用此方法,并且可以为>特定事件指定多个目标 - 操作对。动作消息可以可选地包括发送者和事件作为>参数,按顺序。
如果两个按钮没有完全重叠,那么你想要三个行为:button1(如果触摸按钮1的不与按钮2重叠的部分),则按钮2(如果触摸按钮2的部分没有' t重叠button1),button1& button2(如果触摸重叠部分)基于用户触摸的位置。 。 。
然后你应该在最上面的按钮中有代码来测试触摸以查看它是否在另一个按钮内。像这样:
- (IBAction)buttonPressed:(id)sender forEvent:(UIEvent*)event
{
UIView *button = (UIView *)sender;
UITouch *touch = [[event touchesForView:button] anyObject];
CGPoint location = [touch locationInView:button];
CGPoint otherButtonLocation = [location locationInView:otherButton];
if ([otherButton pointInside:otherButtonLocation withEvent:nil]) {
[self otherButtonAction:otherButton];
}
}
上面的代码没有经过测试,可能不是最优的,只是一个给你一个想法的起点。