Различные вещи, в том числе (возможно, в первую очередь) окно, теряющее свой основной статус, а затем снова возвращающееся в фокус, вызывают сбои рендеринга некоторых из моих пользовательских представлений, пока я не сделаю что-то (например, изменю размер окна), чтобы заставить эти пользовательские представления перерисовать. Я предполагаю, что это связано с какой-то ошибкой кэширования в 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, который я не использую для этого проекта.