유물

2013-12-23 4 views
2

그리기 원인 I가 NSWindow :유물

_window = [[NSWindow alloc] init]; 
[_window setOpaque:NO]; 
[_window setBackgroundColor:[NSColor clearColor]]; 
[_window setStyleMask:NSBorderlessWindowMask]; 

그리고 (계층없이) 내 사용자 정의보기보기의 내용으로이 : 내 사용자 정의보기 I의 drawRect:에서

[_window setContentView:[[MyCustomView alloc] init]]; 

을 시스템 팝업처럼 보이고 색상으로 채우는 베 지어 경로를 만듭니다.

- (void)drawRect:(NSRect)dirtyRect 
{ 
    [NSGraphicsContext saveGraphicsState]; 
    [super drawRect:self.bounds]; 
    NSBezierPath *path = [self bodyShape]; 
    [self.backgroundColor setFill]; 
    [path fill]; 
    [NSGraphicsContext restoreGraphicsState]; 
} 

나는 팝 오버 장소 표시기를 이동시킬 때까지 모든 first time popover shows
멋지다. 내 사용자 정의보기의 drawRect: 콘텐트 오른쪽 drawing with artifacts 그립니다 동안 창에서 다시 그려진 후 유물을 나타납니다.
그리고 다음에 내용을 그릴 때이 흰색 삼각형 (위 그림 참조)은 창에서 같은 위치에 있고 창과 함께 이동합니다. Artifact moves with window
내보기 레이어에 추가하면 - 모두 정상적으로 보이지만 레이어를 추가 할 수 없습니다.
보기를 단색으로 채우면 아티팩트가 없습니다. Fill with solid color
코코아가 첫 번째 비트 맵을 캐시하는 것이 좋습니다. 그러나 왜 이런 일이 일어나고 어떻게 해결할 지 확신 할 수 없습니다. 어쩌면 누군가가 그것을 고치는 이유를 아는가? 감사합니다. .

답변

2

발견! 문제는 창이 장소 표시기 주위에 그림자를 캐시합니다. invalidateShadow 메서드를 NSWindow으로 호출하여 문제를 해결합니다.