2011-10-25 2 views
2

잡지를위한 페이지를 배치하는 앱이 있습니다. 이 앱은 MasterPage라는 NSView의 잡지 (NSScrollView의 contentView)에있는 잡지 (페이지라고하는 클래스의 NSView)를 배치합니다. 스크롤 뷰에서 페이지 그리드를 생각해보십시오.NSView : 수퍼 뷰에서 다른 NSView로 하위 뷰 드래그

"페이지"에는 광고를 나타내는 하위보기가 자동으로 배치됩니다 (클래스 = Ad). 수퍼 뷰 (Page 클래스의 NSView)와 MasterPage (다른 Page 클래스 뷰)의 하위 뷰 사이에서 이러한 광고를 드래그 할 수 있기를 원합니다.

광고 클래스 NSView를 Page 클래스 NSView에 드래그 할 수 있습니다. 원래 mouseDragged 메소드를 호출하여 NSView를 드래그 할 수 있지만 광고 클래스 하위 뷰를 수퍼 뷰에서 "릴리스"하고 다른 NSView로 드래그 할 수 있습니까?

그 의미가 되길 바랍니다.

답변

0

끌기 이벤트를 시작할 때 수퍼 뷰에서 끌어 놓기보기를 제거하고 NSWindowcontentView에 추가하십시오. 그런 다음 전체 창 주위로 드래그 할 수 있습니다. 드래그 이벤트가 완료되면 hitTest:을 사용하여 맨 위에있는 뷰를 확인하십시오. 실제로 원하는 뷰를 찾으려면 수퍼 뷰 계층을 백업해야 할 수 있습니다. 그런 다음 끌기 뷰를 최종 대상에 다시 추가하십시오.

보기에서 클리핑을 구현 한 방법에 따라 드래그보기를 contentView으로 이동하는 단계를 건너 뛸 수 있습니다. 페이지 뷰를 자르지 않으면 드래그 뷰가 화면 전체로 이동해도 괜찮습니다.

+0

감사합니다. Rob, 나는 그 방향으로 가고있었습니다. 나는 그것을 superview와 contentView로 가져올 수 있지만 드래그는 사용할 수 없게된다. – PruitIgoe

+0

나는 이것이 잘 될지 모르겠다. 뷰 계층 구조에서 제거 된 뷰가 드래그하는 기계를 망쳐 놓고 있기 때문인 것으로 판단됩니다. 이 경우에는보기를 제자리에 두는 것이 좋지만 "끌기"동안 빈 것처럼 다시 그려 성공적인 놓기 만하면보기 이동을 완료하는 것이 좋습니다. –

+0

mouseDown, mouseMoved 및 mouseUp을 수동으로 추적해야 할 수 있습니다. 내가이 일을한지 오래되었습니다. Joshua의 관점에서 볼 때 비트 맵으로 뷰를 렌더링하고, 뷰를 숨기고, 비트 맵을 드래그 할 수 있습니다. 성능과 효과 적용에 좋을 수 있습니다 (드래그 앤 드롭이 일반적으로 구현되는 방식입니다). –

관련 문제