2013-05-22 1 views
0

기존 NSView에 NSView를 추가하려하지만 일부 이상한 이유로 실패합니다. 나는 이것을하고있다 :drawRect를 오버라이드하지 않으면 NSView가 보이지 않는데 superview의 레이어에서 setMasksToBounds가 NO 인 경우에도 클리핑됩니다.

 _resizeView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 10, 10)]; 
    [_resizeView.layer setBorderWidth:2]; 
    [_resizeView.layer setBorderColor:[NSColor purpleColor].CGColor]; 
    [_resizeView.layer setBackgroundColor:[NSColor blackColor].CGColor]; 
    [_resizeView setAutoresizingMask:NSViewNotSizable | NSViewMinXMargin | NSViewMaxYMargin]; 
    [self addSubview:_resizeView]; 

자동 크기 조정 마스크를 제거하려고 시도했지만 여전히 작동하지 않는다. 그럼 NSView에서 NSButton으로 바꿨고, 마술처럼 작동하고보기가 보입니다.

drawRect를 재정의하는 NSView의 하위 클래스를 만든 다음 갑자기 표시되지만 그 경로에 대해서만 그릴 수 있습니다 (예 : super drawRect를 호출합니다). 여기서 무슨 일이 일어나고있는거야?

그래서 기본적으로 경계선이있는 상자를 만들었으므로 (배경색은 테스트 용이었습니다) 하위 클래스를 계속 사용할 수는 있지만 기존 뷰의 모서리에이를 추가하려고합니다. , 약간 튀어 나와, 그것을 추가하는보기의 기본 레이어에 대해 setMasksToBounds를 NO로 설정해도 마스크가 적용됩니다.

나는 여기에 미치겠다! 이 중 아무 것도 예상대로 작동하지 않는 이유는 무엇입니까? 메시지 : 뷰 객체 변화를 그리기 위해 사용되는 데이터 또는 상태의 뷰가 setNeedsDisplay를 보내야 할 때마다

답변

3

당신은

[_resizeView setWantsLayer:YES]; 

어쩌면

[_resizeView setNeedsDisplay:YES]; 

전화를해야하지만 그냥 NSView 때문에 나는 그렇게 생각하지 않습니다.

+0

setWantsLayer : 예 표시되지 않는 문제가 수정되었습니다. 그래도 클리핑 경험. –

1
[_resizeView setNeedsDisplay:YES]; 

. 당신은 레이어 백업보기를 사용하는 경우