#cocoa #appkit #graphicscontext
#какао #appkit #graphicscontext
Вопрос:
У нас есть обычай NSPopUpButtonCell
и переопределение этого метода:
- (void)drawBorderAndBackgroundWithFrame:(NSRect)cellFrame inView:(NSView*)controlView
{
[[NSGraphicsContext currentContext] saveGraphicsState];
CGFloat strokeWidth = 1;
cellFrame = NSInsetRect(cellFrame, strokeWidth/2.0, strokeWidth/2.0);
NSBezierPath* rectanglePath = [NSBezierPath bezierPathWithRoundedRect:cellFrame xRadius:2 yRadius:2];
rectanglePath.lineWidth = strokeWidth;
if (self.horizontalImageOffset != 0)
{
CGRect stateImageRect = [self stateImageRectForBounds:cellFrame];
CGFloat verticalSeparatorX = NSMaxX(stateImageRect);
NSBezierPath* verticalSeparator = [NSBezierPath bezierPath];
[verticalSeparator moveToPoint:NSMakePoint(verticalSeparatorX, NSHeight(cellFrame) - strokeWidth)];
[verticalSeparator lineToPoint:NSMakePoint(verticalSeparatorX, strokeWidth 1)];
verticalSeparator.lineWidth = strokeWidth;
[verticalSeparator stroke];
}
[NSGraphicsContext restoreGraphicsState];
}
Проблема в том, что когда я привожу этот класс в свой проект, это приводит к исчезновению другого из моих (не связанных) представлений — например, не будет отображаться должным образом
Если я закомментирую -saveGraphicsState
и -restoreGraphicsState
, он работает и правильно отображает мой другой вид
Что здесь может быть не так?
РЕДАКТИРОВАТЬ: Кикер в том, что товарищи по команде в 10.11 и 10.12 не видят этой проблемы
Ответ №1:
Я думаю, вам следует позвонить
[NSGraphicsContext saveGraphicsState];
не
[[NSGraphicsContext currentContext] saveGraphicsState];