如何找出两个物体是否相互交叉?

时间:2022-01-02 08:10:51

I used the following code to create and animate the object

我使用以下代码来创建对象并为其设置动画

//For creating two imageview 
UIImageView *bbl1Obj=[[UIImageView alloc]initWithFrame:CGRectMake(34,77,70, 70)];
bbl1Obj.image=[UIImage imageNamed:@"bubble1.png"];
[self.view addSubview:bbl1Obj];
UIImageView *bbl2Obj=[[UIImageView alloc]initWithFrame:CGRectMake(224,77,70, 70)];
bbl2Obj.image=[UIImage imageNamed:@"bubble2.png"];
[self.view addSubview:bbl2Obj];
// for animating the objects
[UIImageView beginAnimations:nil context:NULL];
[UIImageView setAnimationDuration:3];
[bbl1Obj setFrame:CGRectMake(224,77,70, 70)];
[UIImageView commitAnimations];

[UIImageView beginAnimations:nil context:NULL];
[UIImageView setAnimationDuration:3];
[bbl2Obj setFrame:CGRectMake(34,77,70, 70)];
[UIImageView commitAnimations];

I want to display an image when the two image intersect each other. but i don't know how to find whether the images intersect other or not while animating. Can anyone please tell me how to find whether two images intersect each other or not while animating.

我想在两个图像相互交叉时显示图像。但我不知道如何在动画时找到图像是否与其他图像相交。任何人都可以告诉我如何在动画时找到两个图像是否相互交叉。

Thanks in advance

提前致谢

2 个解决方案

#1


5  

This is what I would normally use to test for intersections. However, I'm not sure if it would work mid-animation.

这是我通常用来测试交叉点的东西。但是,我不确定它是否适用于动画中期。

if(CGRectIntersectsRect(bbl1Obj.frame, bbl2Obj.frame)) {

    //They are intersecting
}

It that didn't work for testing for intersections while currently animating, try using the presentationLayer property of the view's layer. Here's what the presentationLayer is, taken from the CALayer Class Reference:

它在当前动画时不适用于测试交叉点,请尝试使用视图图层的presentationLayer属性。以下是presentationLayer的内容,取自CALayer类参考:

presentationLayer

Returns a copy of the layer containing all properties as they were at the start of the current transaction, with any active animations applied.

返回包含当前事务开始时所有属性的图层副本,并应用任何活动动画。

With that in mind, you can try this now:

考虑到这一点,您现在可以尝试这样做:

CALayer *bbl1ObjPresentationLayer = (CALayer*)[bb1Obj.layer presentationLayer];
CALayer *bbl2ObjPresentationLayer = (CALayer*)[bb2Obj.layer presentationLayer];

if(CGRectIntersectsRect(bbl1ObjPresentationLayer.frame, bbl2ObjPresentationLayer.frame)) {

    //They are intersecting
}

So if the first way doesn't work, the second way surely will.

因此,如果第一种方式不起作用,第二种方式肯定会。

#2


1  

Use CGRectContainsPoint which gives the objects intersect.

使用CGRectContainsPoint赋予对象相交。

    if(CGRectContainsPoint([bbl1Obj bounds], CGPointMake(bbl2Obj.frame.origin.x, bbl2Obj.frame.origin.y)))
    {
NSLog(@"intersect");
    }

#1


5  

This is what I would normally use to test for intersections. However, I'm not sure if it would work mid-animation.

这是我通常用来测试交叉点的东西。但是,我不确定它是否适用于动画中期。

if(CGRectIntersectsRect(bbl1Obj.frame, bbl2Obj.frame)) {

    //They are intersecting
}

It that didn't work for testing for intersections while currently animating, try using the presentationLayer property of the view's layer. Here's what the presentationLayer is, taken from the CALayer Class Reference:

它在当前动画时不适用于测试交叉点,请尝试使用视图图层的presentationLayer属性。以下是presentationLayer的内容,取自CALayer类参考:

presentationLayer

Returns a copy of the layer containing all properties as they were at the start of the current transaction, with any active animations applied.

返回包含当前事务开始时所有属性的图层副本,并应用任何活动动画。

With that in mind, you can try this now:

考虑到这一点,您现在可以尝试这样做:

CALayer *bbl1ObjPresentationLayer = (CALayer*)[bb1Obj.layer presentationLayer];
CALayer *bbl2ObjPresentationLayer = (CALayer*)[bb2Obj.layer presentationLayer];

if(CGRectIntersectsRect(bbl1ObjPresentationLayer.frame, bbl2ObjPresentationLayer.frame)) {

    //They are intersecting
}

So if the first way doesn't work, the second way surely will.

因此,如果第一种方式不起作用,第二种方式肯定会。

#2


1  

Use CGRectContainsPoint which gives the objects intersect.

使用CGRectContainsPoint赋予对象相交。

    if(CGRectContainsPoint([bbl1Obj bounds], CGPointMake(bbl2Obj.frame.origin.x, bbl2Obj.frame.origin.y)))
    {
NSLog(@"intersect");
    }