2012-05-16 59 views
4

我在UIView內有多個UIImageView's。這些UIImageViews已被轉換。轉換後檢查重疊視圖

當手勢被施加到應該以這樣的方式使得UIImageView's幀外的移動得到偏移的UIImageView's重疊imageViews中的任何一個,我們得到的圖像的全視圖(所有的,這將在完成動畫方式)。

另外請注意,圖像將被轉換,所以我不能夠使用框架屬性。

現在我正在使用CGRectIntersectsRect但它沒有給我想要的效果。

回答

3

掙扎了很多之後,最終我用這個算法達到了預期的效果。

  • 我計算重疊列表UIImageView's並將其存儲在一個數組中。 我爲此使用了CGRectIntersectsRect

    注意:這還包括應用手勢的UIImageView(如目標ImageView)。

  • 對於每個這些重疊的UIImageView的,我執行以下步驟:

    1)計算重疊的ImageView之間的角度和目標 ImageView的。這將給我轉移重疊ImageView的方向。

    2)現在將重疊的ImageView移動一定的距離(比如len),使它保持相同的角度。方向應該是遠離目標ImageView。

    3)您可以使用正弦/餘弦函數計算新的x,y座標。

    x = start_x + len * cos(angle); y = start_y + len * sin(angle);

    注意:對於其中心小於目標ImageView中心的ImageView,您需要減去該值。

    4)現在將重疊的ImageView切換到新計算的中心。

    5)繼續移動它直到視圖不再相交。

  • 我附上我的代碼。我希望它有幫助。

    - (無效)moveImage:(的UIImageView *)viewToMove fromView:(UIImageView的 *)imageToSendBack
    {

     CGFloat angle = angleBetweenLines(viewToMove.center, imageToSendBack.center); 
    
         CGFloat extraSpace = 50; 
    
         CGRect oldBounds = viewToMove.bounds; 
         CGPoint oldCenter = viewToMove.center; 
    
         CGPoint shiftedCenter; 
    
         while(CGRectIntersectsRect(viewToMove.frame,imageToSendBack.frame)) 
         { 
          CGPoint startPoint = viewToMove.center; 
    
          shiftedCenter.x = startPoint.x - (extraSpace * cos(angle)); 
    
          if(imageToSendBack.center.y < viewToMove.center.y) 
           shiftedCenter.y = startPoint.y + extraSpace * sin(angle); 
          else 
           shiftedCenter.y = startPoint.y - extraSpace * sin(angle); 
    
    
          viewToMove.center = shiftedCenter; 
    
         } 
         viewToMove.bounds = oldBounds; 
         viewToMove.center = oldCenter; 
    
         [self moveImageAnimationBegin:viewToMove toNewCenter:shiftedCenter]; 
        } 
    
0

我沒有嘗試,但我會做這樣的:

從CGRectIntersectsRect得到布爾後,寬度和高度也乘這個重疊的UIImageView x和y。

而且由於您在更改轉換後無法使用frame屬性,因此您需要將寬度和高度乘以1.5以獲得最大旋轉量。

警告:如果transform屬性不是標識轉換,則此屬性的值 未定義,因此應予以忽略。

這可能會移動一些視圖的父親比其他,但你會確定所有的意見將被移到UIImageView的框架之外。

如果您嘗試它並且不起作用,請發佈一些代碼,我會爲您提供幫助。

編輯:對於他們的x,y小於你的UIImageView的x,y的視圖,你需要減去偏移量。

+0

由於@iBasel。我不會嘗試它,但即使這似乎是這樣工作。我通過使用另一種算法實現了結果。已經在下面發佈它以及代碼。 –