2011-12-19 9 views
0

私は2つを持っていますUIImageViewsサイズは50x50と60x60ピクセルです。UIImageViewとCGRectIntersectRect(Xcode)

私はCGRectIntersectRectメソッドを使用して、1つのイメージがいつ他のイメージに接触するかを判断します。しかし、これらの2つの画像は2つの球であり、コードでは、「目で」自分が触れていないことがわかるときに、これらの画像が自分自身に触れていると判断することがあります。これはボールがイメージのすべてのスペースを「カバー」しないために起こります。画像のコーナーははっきりしていますが、もちろんコードはこれを気にしません。

問題はどうすれば解決できますか?ボールの周りに完全に追従するイメージのフレームをどうやって決めることができますか?

答えて

2

あなたはUIImageView s内の画像は、常に円(またはUIImageView sは常に、正方形になる)になることを確信している場合、あなたは

CGRect frame1 = image1.frame; 
CGRect frame2 = image2.frame; 
CGPoint center1 = CGPointMake(CGRectGetMidX(frame1), CGRectGetMidY(frame1)); 
CGPoint center2 = CGPointMake(CGRectGetMidX(frame2), CGRectGetMidY(frame2)); 

CGFloat dx = center1.x - center2.x; 
CGFloat dy = center2.x - center2.y; 
float squaredDistance = dx * dx + dy * dy; 

CGFloat radius1 = frame1.size.width/2; 
CGFloat radius2 = frame2.size.width/2; 
CGFloat minDistance = radius1 + radius2; 
if (squaredDistance <= minDistance * minDistance) { 
    //Intersect 
} else { 
    //Do not intersect 
} 

ような何かを行うことができ、私はすべてがパラメトリック作ってみましたが、もちろん、UIImageViewのフレームが固定されている場合は、たとえば#defineディレクティブを使用して、より簡単なコードを書くことができます。例えば

、あなたは最初の画像は50×50であり、第二は、あなたが

#define RADIUS1 25 
#define RADIUS2 30 

のようなものを書いて、あなたのコードを簡素化することができ60x60であることを知っている場合。

各円はUIImageViewのフレームに刻印されているものとします。そうでない場合は、半径を正確に測定する正確な比率を知る必要があります。 (フレームにサークルが刻まれている方がずっと簡単です)