9

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

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

当两个图像相互交叉时,我想显示一个图像。但我不知道如何在动画时找到图像是否与其他图像相交。谁能告诉我如何在制作动画时找到两个图像是否相交。

提前致谢

4

2 回答 2

5

这是我通常用来测试交叉点的方法。但是,我不确定它是否会在动画中间起作用。

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

    //They are intersecting
}

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

表示层

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

考虑到这一点,您现在可以试试这个:

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

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

    //They are intersecting
}

所以如果第一种方法不起作用,第二种方法肯定会。

于 2012-07-25T05:50:22.837 回答
1

使用 CGRectContainsPoint 使对象相交。

    if(CGRectContainsPoint([bbl1Obj bounds], CGPointMake(bbl2Obj.frame.origin.x, bbl2Obj.frame.origin.y)))
    {
NSLog(@"intersect");
    }
于 2012-07-25T05:16:13.420 回答