我有一个 CCLayer
包含许多其他 CCLayer
(如文本项等)。我在左侧有另一个 CCLayer
,我想用它显示许多这些“场景”的缩略图。
左侧的 CCScrollLayer
应该响应其边界内的触摸,而右侧层中的元素应该响应其各自边界内的触摸。
我看到的问题是,当我在右侧拖动一个图层时,左侧的 CCScrollLayer
会响应并滚动。但是,当我滚动滚动层时,右侧的元素不受影响。就好像 CCScrollLayer
的边界太大了,但实际上并不是因为我什至特意将它们设置为 100 像素宽。这里有无法解释的行为吗?
最佳答案
默认情况下,CCLayer 注册为标准触摸委托(delegate)。您必须将其注册为目标委托(delegate)。在这种情况下,CCLayer 可以声明触摸,而其他可触摸元素将不会接收它。您可以通过重写 CCLayer 方法来实现
-(void) registerWithTouchDispatcher
{
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority: self.priority swallowsTouches:YES];
}
在此之后,您必须用这些方法替换您的委托(delegate)方法
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event;
@optional
// touch updates:
- (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event;
- (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event;
- (void)ccTouchCancelled:(UITouch *)touch withEvent:(UIEvent *)event;
你的 ccTouchBegan:withEvent:
方法应该是这样的
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
BOOL shouldClaimTouch = NO;
BOOL layerContainsPoint = // check if current layer contains UITouch position
if( layerContainsPoint )
{
shouldClaimTouch = YES;
}
// do anything you want
return shouldClaimTouch;
}
只是不要忘记将触摸的 UI 坐标转换为 GL。如果此方法返回 YES,则此触摸将不会被任何其他层接收。
关于iphone - 触摸由两层处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11056222/