iOS - обнаружение столкновения с помощью перетаскивания Как определить, когда выбранный вами элемент перетаскивается через другое подпредставление? - PullRequest
8 голосов
/ 16 октября 2010

Мы добавляем функцию перетаскивания в то, что должно стать спортивной площадкой с позициями для игроков.

Позиции отображаются с помощью Interface Builder, каждая из которых представляет собой отдельный UIImageView.

Мы хотим иметь возможность перетаскивать изображения игроков с позиций скамьи со стороны экрана на позиции на поле.

Как лучше всего мы можем обнаружить, когда выбранный игрок, который перемещается, сталкивается с существующим gamePosition imageView?

Мы ищем способ определить, есть ли представление или ImageView подтекущее местоположение.

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

  if gamePositionExistsAtCurrentLocation(location) { //want something like this
    [tile1 setBackgroundColor:[UIColor blueColor]]; 
  } else {
   [tile1 setBackgroundColor:[UIColor yellowColor]]; 
  }
}

Ответы [ 2 ]

14 голосов
/ 16 октября 2010

проверьте, пересекается ли рамка элемента, который вы перемещаете, с рамкой вашего подпредставления

for (UIView *anotherView in self.subviews) {
    if (movingView == anotherView)
        continue;
    if (CGRectIntersectsRect(movingView.frame, anotherView.frame)) {
        // Do something
    }
}

На вашем месте я бы добавил все относящиеся к игре элементы в NSArray и цикл forсквозь это.Таким образом, вы не обнаруживаете столкновения с подпредставлениями, которые не имеют ничего общего с вашей игрой, например с ярлыками и т. Д.

4 голосов
/ 16 октября 2010

Также может потребоваться рассмотреть view.center с CGRectContainsPoint()

...