2012-01-11 8 views
1

私はUIScrollView内にUIImageViewを持っていますが、私は別のUIImageView(dragImage)をスクロールアウトの外にありますが、UIScrollVIewを持つメインView Controllerのビューの内側にあります。iphone:CGRectInterestヒットテスト

私は良い方法は何ですか?

.. dragImageのはscrollview内部ImageViewのと交差しても交差しているどのくらい知っているかどうかを確認したいですか

これは私の結果/コードであり、それはかなり良い作品:

CGRect tabFrame = CGRectMake(0, ((TAB_HEIGHT+2)*i) + scrollView.frame.origin.y, TAB_WIDTH, TAB_HEIGHT); 
      CGRect dragFrame = dragImage.frame; 

      CGRect collision = CGRectIntersection(dragFrame,tabFrame); 

      int area = collision.size.width * collision.size.height; 

      if (area>selectedArea) { 
       selectedArea = area; 
       selectedTab=i; 
      } 


      if (selectedArea>600) break; 

答えて

-1

UIImageView UIScrollViewの= A、およびドラッグビュー= BとUIScrollViewのスクロール=内。スクロール+ scroll.y = jyのオフセットを取ってUIImageViewのy位置を取得し、スクロール+ scroll.x = jxでAxのオフセットを取ると、これはイメージビューのxy位置を取得し、 UIImageViewの幅に簡単にアクセスできます。あなたはAに割り当てられた変数を持っていると仮定します。次に、BのxとAのxを取って、Bx> jx & & bx < jx + a.widthを見て、左上のx位置が箱のどこかに> jy & &によって< jy + a.width。基本的に、スクロールビューとスクロールビューの位置からオフセットを取得した後に、必要な数学を行い、UIImageViewの実際のxとyを取得できます。

+0

このUIViewメソッド呼び出しはどのようにconvertRect toViewを呼び出すのですか?それは私のためにオフセット計算をするのだろうか? – Arcadian

+0

CGRectIntersect関数が組み込まれています。 – Arcadian

2

2つの矩形が重複しているかどうかをそれぞれ導出するには、CGRectIntersectsRect()CGRectIntersection()を使用します。あなただけCGRectIntersection()の戻り値をチェックする可能性があるため、例えば...

BOOL dragImageIntersectsScrollView = CGRectIntersectsRect(dragImage.frame, scrollView.frame); 
CGRect intersectionRect = CGRectIntersection(dragImage.frame, scrollView.frame); 

if (!dragImageIntersectsScrollView) 
{ 
    NSLog(@"Rectangles do not intersect"); 
} 
else 
{ 
    NSLog(@"Intersection rect: %@", NSStringFromCGRect(intersectionRect)) 
} 

CGRectIntersectsRect()は絶対に必須ではありません。交差していない場合は、nullの四角形を返します。これはCGRectIsNull()で確認できます。

+0

dragImageがスクロールビュー内にあるかどうかを検出しません。私はscrollviewの中にいくつかのUIImageViewsを持っていて、dragImageがそれらのUIImageViewの上にあるかどうかを検出したいと思います。私は確かにCGRecIntersectionを使用する必要があると思う..しかし、私は両方のオブジェクトのフレームが同じ座標を使用する必要があります。 – Arcadian

+0

ありがとうございます。 'dragImage'のrectを' CGRect translatedRect = [dragImage convertRect:dragImage.frame toView:scrollView];でスクロールビューの座標空間に変換することができます。これにより、両方のビューが同じ座標空間を共有するため、交差点を正確に比較することができます。 –

関連する問題