2011-02-05 2 views
1

일부보기의 하위보기를 다른보기가 아닌보기 경계에 클립합니다. 얼마나 쉽고 빠르게 구현할 것인가에 대한 아이디어.UIView에 대해 "선택적"clipToBounds를 구현하는 방법, 즉 일부 하위 뷰는 클립 만하고 다른 뷰는 클립하지 않습니다.

컨텍스트 : 뷰에서 드래그 할 수있는 하위 뷰 집합이있는 UIScrollView가 있습니다. 뷰에서 뷰를 드래그 할 때 하위 뷰를 클리핑되지 않도록하고 싶습니다. 그렇지 않으면 나는 그들을 잘라내기를 원한다.

  • 서브 뷰를 레이아웃하기 전에 [view setClipToBounds : YES]를 수행하면 서브 뷰를 끌 때까지 모두 정상입니다. 드래그가 시작되면 touchesBegan : withEvent에서 [view setClipToBounds : NO]를 수행하고 touchesEnded : withEvent :에서 [view setClipToBounds : YES]를 수행하면 드래그 중에 스크롤 뷰가 다시 그려져 이전에 클리핑 된 하위 뷰가 표시됩니다.
  • 내가 시도했으나 작동하지 않은 한 가지 방법은 끌기가 시작되면 바로 scrollview의 하위보기를 scrollview의 superview로 이동하는 것입니다 (하위보기의 touchesBegan : withEvent에서). 그러나보기를 한보기에서 다른보기로 이동할 때 터치 감을 잃어 버리고 끌기가 끝나는 것처럼 보입니다.
+0

UIScrollViewDelegate 메서드에서 구현하지 않는 이유는 무엇입니까? – Felix

+0

"업데이트"를 대답에 넣고 동의해야합니다. –

+0

감사합니다. 제시. 나는 당신의 충고를 받아 들였습니다. – Obliquely

답변

2

다음과 같은 방법으로 문제를 해결했습니다. scrollview의 하위 뷰에 touchesBegan : withEvent가 수신되면 해당 하위 뷰의 알파를 0.0으로 설정합니다. 그런 다음 동일한 하위 뷰를 만들어 scrollview의 수퍼 뷰에 추가합니다. 초기 위치를 위해 나는 다음과 같은 사용

CGPoint newOrigin = [self origin]; 
newOrigin.x = newOrigin.x + [[self superview] origin].x; 
newOrigin.y = newOrigin.y + [[self superview] origin].y - [(UIScrollView*)[self superview] contentOffset].y; 
[newSubview setOrigin: newOrigin]; // setOrigin is defined in a category on UIView - it does what you'd expect 

(주 - 당신이있는 ScrollView 콘텐츠를 보상하지 않는 경우 ... 당신이 수수께끼 동작을 얻을 수있는 오프셋)

가 내있는 touchesMoved가

: withEvent 방법은 이동 (드래그를 구현하는 법칙에 따라) 서브 뷰와 touchesEnded : withEvent는 스크롤 뷰의 수퍼 뷰에서 여분의 서브 뷰를 제거하고 초기 서브 뷰의 알파를 다시 1.0으로 설정합니다. 사실, 추가 하위 뷰 인 piggy는 보이지 않는 하위 뷰를 유지합니다.

관련 문제