检测与以编程方式创建的 ImageView 的碰撞

Posted

技术标签:

【中文标题】检测与以编程方式创建的 ImageView 的碰撞【英文标题】:Detect Collision with Programmatically Created ImageView 【发布时间】:2017-03-17 20:50:25 【问题描述】:

viewDidLoad 中,我正在使用代码以编程方式创建 13 个块:

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];

我需要检测在情节提要(企鹅)上创建的 imageView 与任何一个以编程方式创建的 imageView 块之间的冲突。如果可能,用于检测的代码是什么?我尝试了以下代码,但它不起作用:

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");

【问题讨论】:

你在使用 UIKitDynamics 我没有使用 UIKitDynamics。 【参考方案1】:

如果“rect1”与“rect2”相交,CGRectIntersectsRect 返回 true,否则返回 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;

【讨论】:

非常感谢您让我指出正确的方向。但是,(BOOL)didUIImageCollided 似乎不是一个有效的 Xcode 命令。但我能够使用 for 循环和“UIImageView *iceBlocX ....”代码来生成碰撞检测。最后,代替“返回 YES”,我替换了处理碰撞的代码(并且不需要使用“返回 NO”)。再次感谢。 -(BOOL)didUIImageCollided 是我为检测碰撞而创建的方法!那么你能接受答案吗!? 对不起,我最初错过了这个事实。我可以接受你的回答,但不能投票给你,因为我的声誉不够高。 完成(我认为)。

以上是关于检测与以编程方式创建的 ImageView 的碰撞的主要内容,如果未能解决你的问题,请参考以下文章

dojo中以编程方式与以声明方式创建的小部件之间的区别?

Gatsby-plugin-image 与以编程方式创建的页面问题

Imageview 未显示在以编程方式创建的 collectionview 中

IOS/Objective-C:确定以编程方式创建的 tableview 中 imageView 的大小

如何使用 Swift 以编程方式创建 Hexagon UIButton 或 Clickable ImageView

Web3D编程总结——3D碰撞检测初探