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