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

2つの画像が交差するときに画像を表示したい。しかし、アニメーション中に画像が他の画像と交差するかどうかを確認する方法がわかりません。アニメーション中に2つの画像が交差するかどうかを確認する方法を教えてください。

前もって感謝します

4

2 に答える 2

5

これは私が交差点をテストするために通常使用するものです。ただし、アニメーションの途中で機能するかどうかはわかりません。

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

    //They are intersecting
}

現在アニメーション化中の交差点のテストでは機能しませんでしpresentationLayerた。ビューのレイヤーのプロパティを使用してみてください。CALayerクラスリファレンスpresentationLayerから取得したものは次のとおりです。

プレゼンテーション層

アクティブなアニメーションが適用された、現在のトランザクションの開始時のすべてのプロパティを含むレイヤーのコピーを返します。

それを念頭に置いて、今これを試すことができます:

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

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

    //They are intersecting
}

したがって、最初の方法が機能しない場合、2番目の方法は確実に機能します。

于 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 に答える