Search code examples
iosobjective-cuiimageviewcollision-detection

Detect Collision with Programmatically Created ImageView


In viewDidLoad I'm programmatically creating 13 blocks using the code:

for (int X = 1; X <= 13; X++) {
    UIImageView *iceBlockX = [[UIImageView alloc] initWithFrame:CGRectMake((28 * X - 4),52,28,28)];
    iceBlockX.image = [UIImage imageNamed:@"iceBlock.png"];

    iceBlockX.tag = X;

    [self.view insertSubview:iceBlockX belowSubview:_topPenguinCollisionTarget];
}

I need to detect a collision between an imageView created on the storyboard (penguin) and any one programmatically-created imageView block. If this is possible, what is the code used for the detection? I've tried the following code, but it's not working:

if (((CGRectIntersectsRect(_penguin.frame, _iceBlock1.frame)) && (_iceBlock1.hidden == NO)) ||
     ((CGRectIntersectsRect(_penguin.frame, _iceBlock2.frame)) &&(_iceBlock2.hidden == NO)) ||
     ((CGRectIntersectsRect(_penguin.frame, _iceBlock3.frame)) &&  (_iceBlock3.hidden == NO)) ||
     ((CGRectIntersectsRect(_penguin.frame, _iceBlock4.frame)) && (_iceBlock4.hidden == NO)) ||
     ((CGRectIntersectsRect(_penguin.frame, _iceBlock5.frame)) &&(_iceBlock5.hidden == NO)) ||
     ((CGRectIntersectsRect(_penguin.frame, _iceBlock6.frame)) && (_iceBlock6.hidden == NO)) || 
     ((CGRectIntersectsRect(_penguin.frame, _iceBlock7.frame)) && (_iceBlock7.hidden == NO)) || 
     ((CGRectIntersectsRect(_penguin.frame, _iceBlock8.frame)) && (_iceBlock8.hidden == NO)) || 
     ((CGRectIntersectsRect(_penguin.frame, _iceBlock9.frame)) && (_iceBlock9.hidden == NO)) || 
     ((CGRectIntersectsRect(_penguin.frame, _iceBlock10.frame)) && (_iceBlock10.hidden == NO)) ||
     ((CGRectIntersectsRect(_penguin.frame, _iceBlock11.frame)) && (_iceBlock11.hidden == NO)) ||
     ((CGRectIntersectsRect(_penguin.frame, _iceBlock12.frame)) && (_iceBlock12.hidden == NO)) ||
     ((CGRectIntersectsRect(_penguin.frame, _iceBlock13.frame)) &&(_iceBlock13.hidden == NO))) 
     {
    NSLog(@"A collision was detected");
}

Solution

  • CGRectIntersectsRect return true if "rect1" intersects "rect2", else false.

    - (BOOL)didUIImageCollided{
      for (int X = 1; X <= 13; X++)
       {
         UIImageView *iceBlockX = (UIImageView*)[self.view viewWithTag:X];
         if(CGRectIntersectsRect(_penguin.frame, iceBlockX.frame))
         {
                  return YES;
         }
      }
      return NO;
    }