Ios 模拟独立手势

Ios 模拟独立手势,ios,objective-c,uigesturerecognizer,Ios,Objective C,Uigesturerecognizer,我正在做一个游戏,玩家一次移动两个数字。每一个都有它自己的半个屏幕,只在屏幕内移动。不幸的是,我发现当我同时用两个拇指刷卡时,什么也没发生。甚至我的一个识别器都没有被触发 也许有一种方法。我在GameViewController的顶部创建了另外两个视图,并添加了单独的手势。但是我不能在我的游戏场景中引用它们 在GameViewController和GameSene中是否有识别已声明的滑动并向其添加任何操作的方法 我已经试着根据触摸开始和结束来制作我自己的识别器,但是当一次释放两个手指时,它会变得

我正在做一个游戏,玩家一次移动两个数字。每一个都有它自己的半个屏幕,只在屏幕内移动。不幸的是,我发现当我同时用两个拇指刷卡时,什么也没发生。甚至我的一个识别器都没有被触发

也许有一种方法。我在GameViewController的顶部创建了另外两个视图,并添加了单独的手势。但是我不能在我的游戏场景中引用它们

在GameViewController和GameSene中是否有识别已声明的滑动并向其添加任何操作的方法

我已经试着根据触摸开始和结束来制作我自己的识别器,但是当一次释放两个手指时,它会变得混乱,并且通常会忘记做出两次反应,我的意思是每次释放都是分开的

-(void)setUpGestActions{
    _swipeGestureLeft = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeLeft:)];
    [self.swipeGestureLeft setDirection:UISwipeGestureRecognizerDirectionLeft];
    self.swipeGestureLeft.cancelsTouchesInView = NO;
    self.swipeGestureLeft.delegate = self;
    [self.view addGestureRecognizer: self.swipeGestureLeft];

    _swipeGestureRight = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeRight:)];
    [self.swipeGestureRight setDirection:UISwipeGestureRecognizerDirectionRight];
    self.swipeGestureRight.cancelsTouchesInView = NO;
    self.swipeGestureRight.delegate = self;
    [self.view addGestureRecognizer: self.swipeGestureRight];

    _swipeGestureUp = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeUp:)];
    [self.swipeGestureUp setDirection:UISwipeGestureRecognizerDirectionUp];
    self.swipeGestureUp.cancelsTouchesInView = NO;
    self.swipeGestureUp.delegate = self;
    [self.view addGestureRecognizer: self.swipeGestureUp];

    _swipeGestureDown = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeDown:)];
    [self.swipeGestureDown setDirection:UISwipeGestureRecognizerDirectionDown];
    self.swipeGestureDown.cancelsTouchesInView = NO;
    self.swipeGestureDown.delegate = self;
    [self.view addGestureRecognizer: self.swipeGestureDown];

    _moveLeft = [SKAction moveByX:-self.frame.size.width/6 y:0 duration:self.velocity];
    _moveRight = [SKAction moveByX:self.frame.size.width/6 y:0 duration:self.velocity];
    _moveUp = [SKAction moveByX:0 y:self.frame.size.width/6  duration:self.velocity];
    _moveDown = [SKAction moveByX:0 y:-self.frame.size.width/6 duration:self.velocity];

    _downMovement = [SKAction moveByX:0 y:-1 duration:self.downMovementVelocity];
}

-(void)swipeLeft:(UISwipeGestureRecognizer*) recognizer{
    _sideDisting = [recognizer locationInView:self.view];
    if(self.sideDisting.x <= self.frame.size.width/2){
        [_boy runAction:self.moveLeft];
    }
    else{
        [_girl runAction:self.moveLeft];

    }
}

-(void)swipeRight:(UISwipeGestureRecognizer*) recognizer{
    _sideDisting = [recognizer locationInView:self.view];
    if(self.sideDisting.x <= self.frame.size.width/2){
        [_boy runAction:self.moveRight];
    }
    else{
        [_girl runAction:self.moveRight];
    }
}

-(void)swipeUp:(UISwipeGestureRecognizer*) recognizer{
    _sideDisting = [recognizer locationInView:self.view];
    if(self.sideDisting.x <= self.frame.size.width/2){
        [_boy runAction:self.moveUp];
    }
    else{
        [_girl runAction:self.moveUp];
    }
}

-(void)swipeDown:(UISwipeGestureRecognizer*) recognizer{
    _sideDisting = [recognizer locationInView:self.view];
    if(self.sideDisting.x <= self.frame.size.width/2){
        [_boy runAction:self.moveDown];
    }
    else{
        [_girl runAction:self.moveDown];

    }
}
-(无效)设置动作{
_swipeGestureLeft=[[UISwipeGestureRecognitizer alloc]initWithTarget:self action:@selector(swipeLeft:)];
[self.swipgestureleft设置方向:uiswipgesturerecognizerDirectionLeft];
self.swipeGestureLeft.cancelsTouchesInView=NO;
self.swipeGestureLeft.delegate=self;
[self.view addgesturecognizer:self.swipgestureleft];
_swipeGestureRight=[[UISwipegestureRecognitizer alloc]initWithTarget:self action:@selector(SwiperRight:)];
[self.swipgestureright设置方向:uiswipgesturerecognizerDirectionRight];
self.swipeGestureRight.cancelsTouchesInView=NO;
self.swipeGestureRight.delegate=self;
[self.view addgesturecognizer:self.swipgestureright];
_swipeGestureUp=[[UISwipeGestureRecognitizer alloc]initWithTarget:self action:@selector(swipeUp:)];
[self.swipgestureup设置方向:UISWipgestureRecognitizerDirectionUp];
self.swipeGestureUp.cancelsTouchesInView=NO;
self.swipeGestureUp.delegate=self;
[self.view addgestureRecognitor:self.swipgestereup];
_swipeGestureDown=[[UISwipeGestureRecognitizer alloc]initWithTarget:self action:@selector(swipeDown:)];
[self.swipgesturedown设置方向:UISWipgesturerecognizerDirectiondown];
self.swipeGestureDown.cancelsTouchesInView=NO;
self.swipeGestureDown.delegate=self;
[self.view addgestureRecognitor:self.swippegestureDown];
_moveLeft=[SKAction moveByX:-self.frame.size.width/6 y:0持续时间:self.velocity];
_moveRight=[SKAction moveByX:self.frame.size.width/6 y:0 duration:self.velocity];
_moveUp=[SKAction moveByX:0 y:self.frame.size.width/6 duration:self.velocity];
_moveDown=[SKAction moveByX:0 y:-self.frame.size.width/6持续时间:self.velocity];
_向下移动=[SKAction moveByX:0 y:-1持续时间:self.downMovementVelocity];
}
-(void)swipeLeft:(UISwipegestureRecognitor*)识别器{
_侧距=[识别器位置视图:self.view];

如果(self.sideDisting.x要同时识别多个手势,请在每个手势识别器上设置一个代理。每个手势的代理可以是同一对象

在委托中,执行以下操作:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
     shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

我想你可以看看这个例子。 这可能对你有帮助

UIScreenEdgePanGestureRecognizer *myScreenEdgePanGestureRecognizer;
...
myScreenEdgePanGestureRecognizer = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(handleScreenEdgePan:)];
myScreenEdgePanGestureRecognizer.delegate = self;
// Configure the gesture recognizer and attach it to the view.
...
 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    BOOL result = NO;
    if ((gestureRecognizer == myScreenEdgePanGestureRecognizer) && [[otherGestureRecognizer view] isDescendantOfView:[gestureRecognizer view]]) {
        result = YES;
    }
    return result;
 }
通过此链接,您将找到更多信息


最简单的解决方案是将屏幕分为两个次要视图,并在每个视图上附加单独的手势识别器。

我已经这样做了,但没有任何结果。将interface中的delegate和bool设置为YES,您可能还会在每个alloc代码块中看到self.swipgestureDown.delegate=self;行。我认为这会与其他行混淆识别器,比如双重刷卡之类的。(我还没有在代码中声明过这种东西)