我有一个CCLayer
,其中包含许多其他CCLayer
(例如文本项等)。我在左侧还有另一个CCLayer
,要用来显示其中许多“场景”的缩略图。
左手CCScrollLayer
应响应其边界内的触摸,而右手层中的元素应响应其各自边界内的触摸。
我看到的问题是,例如,当我拖动右侧的图层时,左侧的CCScrollLayer
会响应并滚动。当我滚动滚动层时,右侧的元素不受影响。好像CCScrollLayer
的边界太大,不是因为我什至故意将它们设置为100像素宽。这里有无法解释的行为吗?
可以在http://imageshack.us/photo/my-images/210/dragd.png/看到效果
最佳答案
默认情况下,CCLayer被注册为标准触摸委托。您必须将其注册为目标委托。在这种情况下,CCLayer可以声明触摸,其他可触摸元素将无法接收它。您可以通过重写CCLayer方法来实现
-(void) registerWithTouchDispatcher
{
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority: self.priority swallowsTouches:YES];
}
之后,您必须用这些替换委托方法
- (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;
}
只是不要忘记将touch的UI坐标转换为GL。如果此方法返回“是”,则任何其他层都不会接收到此触摸。
关于iphone - 两层触控,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11056222/