2014-09-28 3 views
0

В моем текущем проекте ios я выделил одну сторону экрана одному объекту и другой стороне экрана другому объекту, и я сделал так, чтобы, если вы проведите пальцем по одна сторона экрана на обозначенном объекте будет перемещаться. Тем не менее, я хочу сделать так, чтобы вы могли перемещать оба объекта одновременно с разными движениями, но я не могу понять, как это сделать. Ниже мой текущий код.перемещение 2 объекта одновременно

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint location = [touch locationInView:touch.view]; 

    if (location.x <= 270) { 
     [Person setCenter:CGPointMake(location.x, Person.center.y)]; 

    } 
    else { 
     [Person1 setCenter:CGPointMake(location.x, Person1.center.y)]; 
    } 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint location = [touch locationInView:touch.view]; 

    if (location.x <= 270) { 
     [Person setCenter:CGPointMake(location.x, Person.center.y)]; 
    } 
    else { 
     [Person1 setCenter:CGPointMake(location.x, Person1.center.y)]; 
    } 
} 

ответ

2

вы должны начать обрабатывать несколько касаний, которые поставляются в touches набор - цикл через все UITouch объекты и сделать свою обработку.

Edit: вот код:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    for(UITouch *touch in [event allTouches]) { 
     CGPoint location = [touch locationInView:touch.view]; 

     if (location.x <= 270) { 
      [Person setCenter:CGPointMake(location.x, Person.center.y)]; 
     } 
     else { 
      [Person1 setCenter:CGPointMake(location.x, Person1.center.y)]; 
     } 
    } 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    for(UITouch *touch in [event allTouches]) { 
     CGPoint location = [touch locationInView:touch.view]; 

     if (location.x <= 270) { 
      [Person setCenter:CGPointMake(location.x, Person.center.y)]; 
     } 
     else { 
      [Person1 setCenter:CGPointMake(location.x, Person1.center.y)]; 
     } 
    } 
} 
+0

У меня такая же проблема с этим кодом, как и с моим исходным кодом. Я попытался переделать свой подход к кодированию моего механика, но я не могу понять, как заставить объекты двигаться одновременно, спасибо за ваш вклад, но – user3795419

+0

@ user3795419, так что происходит, когда вы начинаете делать несколько штрихов? не могли бы вы описать? код должен работать ... спасибо – DaTa

+0

Я могу только переместить один из объектов сразу. Когда я пытаюсь перемещать оба объекта одновременно, проталкивая пальцы по выделенным областям, только один из них перемещается – user3795419

0

При перемещении -touchesBegan & touchesMoved кода в класс представления лица, а не вид/или класса ViewController он находится в в настоящее время, тогда эти мнения могут обрабатывать штрихи независимо друг от друга и одновременно.

Редактировать: Дополнительная информация: В настоящее время вы обрабатываете события касаний (в том, что я предполагаю UIViewController), используя код, вставленный выше, если вы перенесли этот код в свой класс Person, который вы создали, вы можете сделать код проще и добиться желаемого результата. Это приведет к тому, что Человек решит, будет ли он затронут и где и будет двигаться соответственно.

В файле Person.m добавить этот код,

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint location = [touch locationInView:self.superview]; 
    [self moveToLocation:location]; 
} 

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint location = [touch locationInView:self.superview]; 
    [self moveToLocation:location]; 
} 

-(void)moveToLocation:(CGPoint)location{ 
    CGFloat halfOfPersonWidth = self.bounds.size.width /2.0f; 
    CGFloat halfOfSuperviewWidth = self.superview.bounds.size.width/2.0f; 

    // Stop Person from going off left screen edge 
    if ((location.x - halfOfPersonWidth) <= 0.0f){ 
     return; 
    } // Stop Person from going off right screen edge 
    else if ((location.x + halfOfPersonWidth) >= self.superview.bounds.size.width){ 
     return; 
    } 

    if (self.center.x < halfOfSuperviewWidth) { 
     // Person is on the left of the screen and should not move to right side 
     if ((location.x + halfOfPersonWidth) > halfOfSuperviewWidth) { 
      return; 
     } 
    } else{ 
     // Person is on the right of the screen and should not move to left side 
     if ((location.x - halfOfPersonWidth) < halfOfSuperviewWidth) { 
      return; 
     } 
    } 
    // If we have made it this far then we can move the Person 
    // move to touch location on x axis only 
    [self setCenter:CGPointMake(location.x, self.center.y)]; 
    } 

Теперь в вашем классе View Controller вы можете удалить оригинальный -touchesBegan & -touchesMoved код, который вы вставили здесь, или просто закомментировать, если вы хочу быть осторожным

/* put slash asterisks above the code and asterisks slash below the code to comment out */ 

Если вы построить и запустить вы должны быть в состоянии переместить каждый вид Person вокруг, как и раньше, но если вы поместите палец на каждом виде Людей в то же время вы должны быть в состоянии переместить их одновременно ,

+0

Я начинаю начинать, извините, если я чувствую себя очень опытным, но не возражаете ли вы показать мне пример того, как это выглядело бы по коду? Большое спасибо за ваш ввод – user3795419

+0

Нет проблем, дайте мне 5 минут –

+0

Если это сработало для вас, вы можете принять мой ответ - мне нужно увеличить свой репер, чтобы я мог комментировать. –

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