0

カスタム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 のチームメイトにはこの問題が表示されないことです。

4

1 に答える 1

1

電話したほうがいいと思います

[NSGraphicsContext saveGraphicsState];

いいえ

[[NSGraphicsContext currentContext] saveGraphicsState];
于 2016-10-06T23:04:51.583 に答える