2012-06-01 82 views
3

如何確定兩個uiviewimages是否相交。我想做一個自動捕捉功能。當小圖像與大圖像相交或接近它時(Lets說距離< = x),我希望小圖像在它們相交的點自動捕捉(連接)到大圖像。兩個UIViewImages的交集

回答

1

前兩次的海報已經在正確的軌道上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]; 
} 

基本上這是說,如果兩個圖像相交,小圖像幀在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]; 
} 

希望這能解決問題。如果這有幫助,記得投票並選擇答案。

-------編輯--------- 最後一件事。我說CGAffineTransformMakeRotation(30)中的「30」代表30度,但這是不正確的。 CGAffineTransformMakeRotation函數以弧度爲參數,所以如果你想要30度,你可以這樣做:

#define PI 3.14159265 

CGAffineTransformMakeRotation(PI/6); 
+0

感謝您的答覆。這工作得很好。唯一的問題是大圖像內部的小圖像。我想要這樣的東西。讓我們假設小圖像是樹的一個分支。大的形象是一個很大的分支。當小分支與大分支相交時,小分支的起源將連接到大分支的表面,如http://postimage.org/image/u5790gt05/中所示。我應該使用CGRectIntersection方法嗎? –

+0

如果CGRectIntersect方法相交,則返回「YES」,否則返回「NO」。我會在上面的帖子中添加更多... – pasawaya

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

BOOL isIntersecting = CGRectIntersectsRect(smallView.frame, bigFrame); 
+0

什麼是padding.x和padding.y?對不起,我是一個新手:) –

+0

你只是真的需要第二個位,但你可以通過-padding來插入,以使較小的視圖具有更大的矩形,當它與視圖本身不相交時,可以捕捉到較大的視圖。你可以使用相同的值爲x和y如果你想要或聲明一個cgpoint –

1

可以使用CGRectIntersectsRect方法來檢查幀:

if (CGRectIntersectsRect(myImageView1.frame, myImageView2.frame)) 
    { 
     NSLog(@"intersected") 
    }