这是我的小情况。我正在用uipanGesture移动一个ccsprite。我可以将它全部移动而不是问题,我在屏幕上有一个可以用uitapgesture拍摄的地方。
-(void)handleTap:(UITapGestureRecognizer *)recognizer{
CGPoint location = [recognizer locationInView:recognizer.view];
location = [[CCDirector sharedDirector]convertToGL:location];
location = [self convertToNodeSpace:location];
if (location.x > winSize.width * .6 && location.y <winSize.height/2) {
NSLog(@"fire");
}
我添加了委托方法,所以当我平移时,我可以点击开火按钮:一切正常。
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}
但是当我没有平移并且只是使用uitapgesture进行射击时,我无法平移当我开火时...我认为它发生的原因是因为它正在注册最后一次点击
recognizer.state == UIGestureRecognizerStateBegan
因为我没有平移。
任何人都知道我可以点击的方式,而不是将点击注册为if (recognizer.state == UIGestureRecognizerStateBegan
我试过(location.x < winSize.width/2)
,但它没有用。
答案 0 :(得分:1)
您可能需要使用requireGestureRecognizerToFail设置手势识别器链。这将意味着正在执行的手势将被强制失败,优先于第二个手势。
所以我想你想要[requireGestureToFail:]。
答案 1 :(得分:0)
我不知道是否有人对这篇文章感兴趣,但我确实解决了90%的问题 使用以下
for(int i=0; i<[recognizer numberOfTouches]; i++){
CGPoint pt = [recognizer locationOfTouch:i inView:recognizer.view];
pt = [[CCDirector sharedDirector]convertToGL:pt];
pt = [self convertToNodeSpace:pt];
if (i==0) {
//stuff
}