NSRectFill 和 NSBezierPath(rect).fill 有什么区别
What is the difference between NSRectFill and NSBezierPath(rect).fill
我知道我可以使用 NSRectFill(bounds) 填充一个矩形。但是我想保留 PDF 输出的透明度,我发现我只能使用 NSBezierPath(rect: bounds).fill() 来做到这一点
这两者有什么区别(在幕后)?
func drawBackground() {
CGContextSaveGState(currentContext)
if (NSGraphicsContext.currentContextDrawingToScreen()) {
NSColor(patternImage: checkerboardImage).set()
NSRectFillUsingOperation(bounds, NSCompositingOperation.CompositeSourceOver)
}
NSColor.clearColor().setFill()
//NSRectFill(bounds) //option 1
NSBezierPath(rect: bounds).fill() // option 2
CGContextRestoreGState(currentContext)
}
extension NSImage {
static func checkerboardImageWithSize(size : CGFloat) -> NSImage {
let fullRect = NSRect(x: 0, y: 0, width: size, height: size)
let halfSize : CGFloat = size * 0.5;
let upperSquareRect = NSRect(x: 0, y: 0, width: halfSize, height: halfSize);
let bottomSquareRect = NSRect(x: halfSize, y: halfSize, width:halfSize, height: halfSize);
let image = NSImage(size: NSSize(width: size, height: size))
image.lockFocus()
NSColor.whiteColor()
NSRectFill(fullRect)
NSColor(deviceWhite: 0.0, alpha:0.1).set()
NSRectFill(upperSquareRect)
NSRectFill(bottomSquareRect)
image.unlockFocus()
return image
}
}
我主要是一名 iOS 程序员,这些天在 AppKit 方面不是很流利,但我猜你得到了错误的 NSCompositingOperation。我从文档中看到 NSRectFill
使用 NSCompositeCopy。如果您使用 NSRectFillUsingOperation
,您可以在其中指定合成操作,也许效果会更好。
我知道我可以使用 NSRectFill(bounds) 填充一个矩形。但是我想保留 PDF 输出的透明度,我发现我只能使用 NSBezierPath(rect: bounds).fill() 来做到这一点 这两者有什么区别(在幕后)?
func drawBackground() {
CGContextSaveGState(currentContext)
if (NSGraphicsContext.currentContextDrawingToScreen()) {
NSColor(patternImage: checkerboardImage).set()
NSRectFillUsingOperation(bounds, NSCompositingOperation.CompositeSourceOver)
}
NSColor.clearColor().setFill()
//NSRectFill(bounds) //option 1
NSBezierPath(rect: bounds).fill() // option 2
CGContextRestoreGState(currentContext)
}
extension NSImage {
static func checkerboardImageWithSize(size : CGFloat) -> NSImage {
let fullRect = NSRect(x: 0, y: 0, width: size, height: size)
let halfSize : CGFloat = size * 0.5;
let upperSquareRect = NSRect(x: 0, y: 0, width: halfSize, height: halfSize);
let bottomSquareRect = NSRect(x: halfSize, y: halfSize, width:halfSize, height: halfSize);
let image = NSImage(size: NSSize(width: size, height: size))
image.lockFocus()
NSColor.whiteColor()
NSRectFill(fullRect)
NSColor(deviceWhite: 0.0, alpha:0.1).set()
NSRectFill(upperSquareRect)
NSRectFill(bottomSquareRect)
image.unlockFocus()
return image
}
}
我主要是一名 iOS 程序员,这些天在 AppKit 方面不是很流利,但我猜你得到了错误的 NSCompositingOperation。我从文档中看到 NSRectFill
使用 NSCompositeCopy。如果您使用 NSRectFillUsingOperation
,您可以在其中指定合成操作,也许效果会更好。