2012-01-11 4 views
1

UIIcageView 안에 UIImageView가 있습니다. 다른 UIImageView (dragImage)는 scrollview가 아닌 ​​outview이지만 UIScrollVIew가있는 View Controller의 뷰 내부에 있습니다.iphone : CGRectInterest 히트 테스트

나는 dragImage가있는 ScrollView 안에있는 이미지 뷰와 교차할지 어떨지를 확인하려면 또한 교차 얼마나 알고 싶어

..

좋은 방법은 무엇입니까

?

이 내 결과/코드이며 꽤 잘 작동합니다

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

있는 UIScrollView = A 안에있는 UIImageView, 드래그보기 = B와있는 UIScrollView = 스크롤. scroll + scroll.y = jy의 오프셋을 가져 와서 UIImageView의 y 위치를 얻은 다음 scroll + scroll.x = jx에서 Ax의 오프셋을 취하면 이미지 뷰의 xy 위치가 표시됩니다. UIImageView의 너비에 쉽게 액세스 할 수 있습니다. 여기에 A에 할당 된 변수가 있다고 가정하면 B의 x와 A의 x를 취해 Bx> jx & & bx < jx + a.width인지 확인하여 왼쪽 상단 x 위치가 상자의 어딘가에> jy & & by < jy + a.width. 기본적으로 UIImageView의 실제 x와 y를 얻기 위해 스크롤보기와 scrollviews 위치에서 오프셋을 얻은 후에 원하는 수학을 할 수 있습니다.

+0

이 UIView 메서드 호출은 무엇입니까? convertRect toView]? 나를 위해 오프셋 계산을 할 것인가? – Arcadian

+0

CGRectIntersect 함수가 내장되어 있습니다 .. – Arcadian

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];와 함께 scrollView의 좌표 공간으로 변환 할 수 있습니다. 이렇게하면 두 뷰가 동일한 좌표 공간을 공유하므로 정확하게 교차점을 비교할 수 있습니다. –