2

我使用 kCGBlendModeClear 混合模式来实现橡皮擦工具。它在 ios 中运行良好,但在 OS X 中无法运行。它在 OS X 中使用 kCGBlendModeClear 混合模式创建黑色线条。

这是示例代码:

  #if TARGET_OS_IPHONE
    CGContextRef context = UIGraphicsGetCurrentContext();
  #else
    CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort];
  #endif

  CGContextSaveGState(context);

  CGContextSetLineWidth(context, 10);
  CGContextSetRGBStrokeColor(context, 255.0, 0.0, 0.0, 1.0);
  CGContextMoveToPoint(context, 100, 100);
  CGContextAddLineToPoint(context, 200, 200);
  CGContextStrokePath(context);

  CGContextSetBlendMode(context, kCGBlendModeClear);
  CGContextMoveToPoint(context, 150, 150);
  CGContextAddLineToPoint(context, 180, 180);
  CGContextStrokePath(context);

  CGContextRestoreGState(context);

IOS:

在 iOS 中

但在 OS X 中:

在 OS X 中

我还尝试更改视图和超级视图不透明属性和背景颜色,但没有帮助。

我知道清晰的颜色实际上是带有 alpha 0 的黑色,但我想知道为什么在 OS X 中忽略了 alpha。

谢谢。

4

2 回答 2

1

使用 Layer 支持的 NSView, [view setWantsLayer:YES];

于 2013-11-25T13:14:11.107 回答
0

我遇到了和你一样的问题。

使用 NSBezierPath 进行剪辑,以防 NSView 剪辑

使用“kCGBlendModeClear”需要设置“self.backgroundColor = [UIColor clearColor];”。

我想我们不能设置 NSView 的 backgroundColor。否则,我们必须调整 NSView 的上下文。但是,我不知道该怎么做。

只需使用 NSBezierPath 剪辑。这很简单...

于 2013-04-19T07:34:36.720 回答