2012-05-26 6 views
6

NSView- (NSRect)visibleRect이 변경 될 때마다 알림을 받고 싶습니다. 표시되는 rect를 기반으로 멋진 하위 뷰 레이아웃을 만들고 싶습니다. 솔직히 말해서, 지금 당황 스럽네요. -visibleRect는 KVO 알림을 (이 말이) 방출하지 않으며, 가시 RECT 명시 적으로 -visibleRect를 호출하지 않고 변경 여부를 여부를 확인하는 방법이있을 것 같지 않습니다.-visibleRect를 관찰 할 수 있습니까

이 모든 것이 가능합니까? (또는 끔찍한, 끔찍한 생각입니까?)

+1

왜 마이너스 1입니까? – Vervious

답변

6

-[NSView updateTrackingAreas]을 무시하거나 NSViewDidUpdateTrackingAreasNotification을 수신 할 수 있습니다. 그것들은 보이는 rect의 변경보다 더 많은 경우에 발생할 수 있지만, 보이는 rect의 변경을 위해 일어나야합니다. 나는 생각한다.

그렇긴해도 그것은 끔찍한 생각 일 수 있습니다. 알기 힘듭니다. :)

+0

실습 가능합니다. 감사합니다. – Vervious

+0

좋은 질문과 대답. 이 대답은 내가 직면 한 다른 문제에서 나를 도왔지만 나는이 질문을 가지고있다. 이 질문에 대해서는이 답변에 투표 할 것이지만 그것을 받아들이지는 않을 것입니다. – trss

+0

'updateTrackingAreas'의 문서는 "뷰의 지오메트리가 변경되어 추적 영역을 다시 계산해야 할 때 자동으로 호출됩니다."라고 말합니다. 뷰의 기하학이 무엇을 의미하는지는 명확하지 않습니다. View Geometry에 대한 주제가 있지만 범위와 프레임에 대해서만 설명합니다. visibleRect를 설명하지만보기의 지오메트리로 호출하지는 않습니다. – trss

1

다른 옵션 게시물 10.5는 뷰 (및 하위 뷰)가 그려지기 직전에 호출되는 -viewWillDraw 메서드입니다. [super viewWillDraw]를 호출하기 전에보기의 사각형을 가져 와서 레이아웃을 수행 할 수 있습니다.

0

추적 영역 변경 내용을 듣는 Ken의 제안은 해킹 된 것처럼 느껴지지만 작동하는 것으로 보입니다. 그러나 크기 조정이 완료된 후에 만 ​​트리거됩니다. 내가 한 것처럼 크기를 조정할 때 업데이트가 필요하면 -[NSView resizeWithOldSuperviewSize:]을 무시하면됩니다.

관련 문제