2016-02-20 2 views
0

В моем текущем проекте я использую UITapGestureRecognizer. Я закодировал его так, чтобы при нажатии левой стороны экрана перемещался объект, а при нажатии правой стороны экрана перемещался другой объект. Однако распознаватель жеста работает только при нажатии правой стороны. Кроме того, я хотел бы сделать так, чтобы SKActions можно было выполнить, если обе стороны одновременно задействованы. Я не понимаю, что я делаю неправильно. Мой код ниже. Заранее спасибоUITapGestureRecognizer не будет выполняться должным образом

В ViewDidLoad

UITapGestureRecognizer *tap1 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap1:)]; 

[tap1 setNumberOfTapsRequired:1]; 
[self.view addGestureRecognizer:tap1]; 


view.multipleTouchEnabled = YES; 





    -(void)tap1:(UIGestureRecognizer *)gestureRecognizer { 


SKNode *person11 = [self childNodeWithName:@"person1"]; 
SKNode *person2 = [self childNodeWithName:@"person2"]; 

CGPoint pt = [gestureRecognizer locationInView:self.view]; 





if (pt.x > (self.view.bounds.size.width/2)) 
{ 
    if (person2.position.x == CGRectGetMidX(self.frame) + 400) { 
     SKAction *moveLeft2 = [SKAction moveTo:CGPointMake(CGRectGetMidX(self.frame) + 90, CGRectGetMidY(self.frame) + 200) duration:0.1f]; 
     [person2 runAction:moveLeft2]; 
    } 
    if (person2.position.x == CGRectGetMidX(self.frame) + 90) { 
     SKAction *moveRight2 = [SKAction moveTo:CGPointMake(CGRectGetMidX(self.frame) + 400, CGRectGetMidY(self.frame) + 200) duration:0.1f]; 
     [person2 runAction:moveRight2]; 
    } 
} 
    if (pt.x < (self.view.bounds.size.width/2)){ 
    if (person11.position.x == CGRectGetMidX(self.frame) - 90) { 
     SKAction *moveLeft2 = [SKAction moveTo:CGPointMake(CGRectGetMidX(self.frame) - 400, CGRectGetMidY(self.frame) + 200) duration:0.1f]; 
     [person11 runAction:moveLeft2]; 
    } 
    if (person11.position.x == CGRectGetMidX(self.frame) - 400) { 
     SKAction *moveRight2 = [SKAction moveTo:CGPointMake(CGRectGetMidX(self.frame) - 90, CGRectGetMidY(self.frame) + 200) duration:0.1f]; 
     [person11 runAction:moveRight2]; 
    } 

} 
} 

ответ

1

Вместо распознавателя жестов выполняйте работу в касании. Вот пример:

Swift

override func viewDidLoad() { 
     super.viewDidLoad() 
     self.view.multipleTouchEnabled = true 
} 

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    for touch in touches { 
     if(touch.locationInView(self.view).x<self.view.frame.midX) { 
      print("On the left half") // run the respective SKAction 
     } else { 
      print("On the right half") // run the respective SKAction 
     } 
    } 
} 

Objective C (должно работать, но я использую Swift и перевел на свой телефон, так что это не может работать отлично)

-(void)viewDidLoad { 
    self.view.multipleTouchEnabled = YES 
} 

- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { 
    for (UITouch* touch in touches) { 
     if(touch.locationInView(self.view).x<self.view.frame.midX) { 
      printf("On the left half\n"); // run the respective SKAction 
     } else { 
      printf("On the right half\n"); // run the respective SKAction 
     } 
    } 
} 

Это будет делать именно то, что вы хотите.

Pretty self explainatory: позволяет несколько касаний, а затем, когда сенсорный режим отпускается, он проверяет его относительное горизонтальное положение в представлении (.x) и видит, находится ли он в левой или правой половине обзора. Никаких распознавателей жестов не нужно!

Я попытаюсь дважды проверить код Objective C позже, но Swift определенно работает.

Если у вас есть какие-либо вопросы, сообщите мне!

+0

Благодарим за помощь, этот метод работает. По какой-то причине Person1 не будет распознаваться независимо от того, какой метод используется. SKAction не влияет на человека1. я понятия не имею, почему это так, вы знаете, что я могу сделать неправильно? – d33

+0

@ d33, вы пробовали отлаживать (печатать на консоль, чтобы проверить, действительно ли код выполняется). – Dopapp

0

Попробуйте поставить это (в Swift):

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool { 
     return true 
    } 

К сожалению я Swift часто ... Я думаю, вы можете просто найти встроенный gestureRecognizer() на Objective-C тоже.

Смежные вопросы