使用kCGBlendModeClear在Mac OS X上实现橡皮擦笔划

时间:2013-01-30 03:53:38

标签: macos cocoa core-graphics

我使用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:

in iOS

但在OS X中:

in OS X

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

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

感谢。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我和你的问题一样。

在NSView剪辑的情况下使用NSBezierPath剪辑

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

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

只使用NSBezierPath剪辑。这很容易......