3

2 つの uiviewimages が交差しているかどうかを判断するにはどうすればよいですか? 自動スナップ機能を実行したい。小さな画像が大きな画像と交差するか、それに近い場合(距離<= xと言います)、小さな画像が交差する点で大きな画像に自動的にスナップ(接続)します。

4

3 に答える 3

2
CGRect bigframe = CGRectInset(bigView.frame, -padding.x, -padding.y);

BOOL isIntersecting = CGRectIntersectsRect(smallView.frame, bigFrame);
于 2012-06-01T13:13:04.037 に答える
1

CGRectIntersectsRectメソッドを使用して、フレームをチェックできます。

 if (CGRectIntersectsRect(myImageView1.frame, myImageView2.frame))
    {
        NSLog(@"intersected")
    }
于 2012-06-01T13:13:54.833 に答える
1

前の 2 つのポスターは、正しい軌道に乗っていCGRectIntersectsRectます。

BOOL isIntersecting = CGRectIntersectsRect(smallImage.frame, largeImage.frame);
if(isIntersecting){

    //Animate the Auto-Snap
    [UIView beginAnimation:@"animation" context:nil];
    [UIView setAnimationDuration:0.5];
    smallImage.frame = largeImage.frame;
    [UIView commitAnimations];
}

基本的にこれは、2 つの画像が交差している場合、小さな画像フレームが 0.5 秒かけて大きな画像にスナップすることを示しています。ただし、アニメーション化する必要はありません。を除くすべてのコードを削除することで、瞬時に行うことができますsmallImage.frame = largeImage.frame;。ただし、アニメーションの方法をお勧めします。お役に立てれば。

- - - -編集 - - - -

次のコードを使用できます。

 BOOL isIntersecting = CGRectIntersectsRect(smallImage.frame, largeImage.frame);
 if(isIntersecting){     
     //Animation
     [UIView beginAnimation:@"animation" context:nil];
     [UIView setAnimationDuration:0.5];

     smallImage.center = CGPointMake(largeImage.center.x, largeImage.center.y);

     //If you want to make it like a branch, you'll have to rotate the small image
     smallImage.transform = CGAffineTransformMakeRotation(30);
     //The 30 is the number of degrees to rotate. You can change that.

     [UIView commitAnimations];
 }

これで問題が解決したことを願っています。これが役に立った場合は、投票して答えとして選ぶことを忘れないでください。

-------編集------- 最後にもう 1 つ。CGAffineTransformMakeRotation(30)「30」は30 度を表すと言いましたが、それは違います。CGAffineTransformMakeRotation 関数はパラメーターをラジアンで受け取るため、30 度が必要な場合は次のようにします。

#define PI 3.14159265

CGAffineTransformMakeRotation(PI/6);
于 2012-06-02T04:49:49.340 に答える