Различные вещи, в том числе (возможно, наиболее заметно), когда окно теряет свой основной статус, а затем возвращается в фокус, заставляет некоторые из моих пользовательских видов отображать сбои рендеринга, пока я не сделаю что-то (например, изменим размер окна), чтобы этипользовательские представления для перерисовки.Я предполагаю, что это связано с некоторой ошибкой кэширования в AppKit, и я уверен, что я не единственный, кто получает такое поведение, поэтому кто-нибудь знает, как обойти это?
Вот пример:
Заметили странную темную линию слева от фона вида?Это нарисовано даже без подпредставлений в представлении.Я получаю другие подобные ошибки в некоторых других моих представлениях.
Вот код, который выполняет рисование:
void EDDrawGlossEffectInRect(NSRect dirtyRect) {
NSRect topRect, bottomRect;
NSDivideRect(dirtyRect, &topRect, &bottomRect, (dirtyRect.size.height / 2), NSMaxYEdge);
[EDLightChromeColor set];
NSRectFill(topRect);
[EDMidChromeColor set];
NSRectFill(bottomRect);
}
и
-(void)drawRect:(NSRect)dirtyRect {
EDDrawGlossEffectInRect(dirtyRect);
NSBezierPath *path = [NSBezierPath bezierPath];
[path setLineWidth:1.0];
NSPoint startPoint = {0, dirtyRect.size.height};
NSPoint endPoint = {dirtyRect.size.width, dirtyRect.size.height};
[path moveToPoint:startPoint];
[path lineToPoint:endPoint];
[[NSColor colorWithCalibratedWhite:0.7 alpha:1] set];
[path stroke];
}
Представление создается программноне с Interface Builder, который я не использую для этого проекта.