Как существование `-saveGraphicsContext` и`-restoreGraphicsContext` может вызывать эти проблемы в 10.10?

У нас есть обычай 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 это работает и рисует мой другой взгляд должным образом

введите описание изображения здесь

Что может быть не так?

РЕДАКТИРОВАТЬ: Kicker в том, что товарищи по команде 10.11 и 10.12 не видят эту проблему

1 ответ

Решение

Я думаю тебе следует позвонить

[NSGraphicsContext saveGraphicsState];

не

[[NSGraphicsContext currentContext] saveGraphicsState];
Другие вопросы по тегам