- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想要的是取一个填充的矩形并使用另一种形状在其中打一个洞。这正是 NSBezierPath
设计的目的。您添加一个矩形路径,然后添加将“穿透”它并最终填充它的子路径。在我的例子中,子路径实际上是文本。没问题,效果很好:
除非我使用 Helvetica Neue Bold 作为我的字体。当我使用它时,我最终得到一个没有任何文本的纯蓝色矩形。但是子路径确实在绘制——事实上,如果我将填充的矩形缩小一点,你实际上可以看到一些文本路径:
我在使用 Helvetica Neue Italic 时得到了相同的行为。 Helvetica Neue Medium 效果很好,Helvetica Bold、Times New Roman Bold 和 Arial Bold 也是如此。
我试过同时使用 NSEvenOddWindingRule
和 NSNonZeroWindingRule
。 (编辑:显然我并没有真正尝试过 NSEvenOddWinding
规则,因为事实证明它确实有效)
这是我在 NSView
子类的 drawRect
方法中使用的代码。
NSLayoutManager *layoutManger = [[[NSLayoutManager alloc] init] autorelease];
NSTextContainer *textContainer = [[[NSTextContainer alloc]
initWithContainerSize:NSMakeSize(300, 100)] autorelease];
NSFont *font = [NSFont fontWithName:@"Helvetica Neue Bold" size:100];
NSDictionary *textAttribs = [NSDictionary dictionaryWithObjectsAndKeys:
font, NSFontAttributeName, nil];
NSTextStorage *textStorage = [[[NSTextStorage alloc] initWithString:@"Hello"
attributes:textAttribs] autorelease];
[layoutManger addTextContainer:textContainer];
[layoutManger setTextStorage:textStorage];
NSRange glyphRange = [layoutManger glyphRangeForTextContainer:textContainer];
NSGlyph glyphArray[glyphRange.length];
NSUInteger glyphCount = [layoutManger getGlyphs:glyphArray range:glyphRange];
NSBezierPath *path = [NSBezierPath bezierPathWithRect:NSMakeRect(0, 0, 200, 100)];
[path appendBezierPathWithGlyphs:glyphArray count:glyphCount inFont:font];
[[NSColor blueColor] setFill];
[path fill];
那么这里发生了什么?在向路径添加字形时,为什么某些字体的行为与其他字体不同?
编辑:解决方案是使用NSEvenOddWindingRule
。创建路径
后添加这一行:
[path setWindingRule:NSEvenOddWindingRule];
Peter Hosey 的回答解释了为什么会这样。
最佳答案
这可能与字体中路径的方向有关。一种字体可能使用顺时针路径;另一个可能使用逆时针路径。
实现您想要的效果的更可靠方法是简单地填充矩形,然后将图形上下文的合成模式设置为 NSCompositeSourceOut
,然后从中绘制文本。如果您只想从填充中剪切文本,则可以使用 Core Graphics 将填充和文本绘制包裹在透明层中。
关于objective-c - 为什么 Helvetica Neue Bold 字形不会在 NSBezierPath 中绘制为普通子路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4742773/
这是我第一次使用字形,但我知道它们是文本,并且可以像任何其他文本一样设置样式。这就是我对为什么我的字形图标没有改变颜色感到困惑的原因。 我希望它将颜色从黑色(默认)更改为白色。这是我的代码: HTML
JavaScript/CSS/web 中有没有办法检测系统是否具有某个 Unicode 字符的有效字形? 例如,我想检测语言中的某个字符是否显示为方形框,因为用户没有显示这些 Unicode 点的字体
在编写继承自 TBitBtn 的自定义控件时,我正在寻找一种方法来覆盖或拦截仅绘制字形并自己绘制字形,而不必重绘整个控件。我广泛使用 VCL 样式,并希望避免重新创建所有绘图和样式 Hook 等。不幸
我正在使用tileserver-gl的Docker镜像来运行服务器(klokantech/tileserver-gl)。 我想像自己的Font Awesome(currently here avail
正如标题所说。我理解,使用复合字符和影响其他字符和连字的字符正确呈现所有 unicode 格式确实很困难。我们的字体似乎是为最大程度的 Unicode 符号支持而设计的(Symbola、Code200
我想将 Unicode 字形渲染为 jpg 格式。我应该更改 java 代码中每个 Unicode block 的字体吗?我试着不那样做,但没有用。但是,为每个 block 更改字体需要花费大量时间。
我有一个可以使用 Facebook 帐户登录的网站,我现在遇到的唯一问题是我无法在按钮中的文本前面从 Facebook 获取字形。在这里你可以看到代码。我也在用 Bootstrap, ';" clas
Twitter Bootstrap 使用字体文件中的图标。如果图标显示在偏离像素的元素中(例如,通过将父级设置为百分比宽度,如 51% 并将图标向右浮动),则图标会变得模糊。 这里是手动设置位置为40
我试图根据 StatusLineId 更改我的字形图标,但没有出现任何字形图标。我做错了什么? HTML 代码: Js函数 function statusIc
我有一个包含许多图标的 SVG 文件: Generated by Fontastic.me 这是我如何链接到 CSS: @font-face { font-family: "m
我在浏览器控制台中收到错误:: glyphicons-halflings-regular.woff2:1 Failed to load resource: the server responded w
几个小时以来,我一直在与 š 的字体样式作斗争。 我正在使用来自 google webfonts 的 webfont“open sans”并测试了 googles review 选项上的字素。一切都很
我需要使用一个看起来像挂锁的 unicode 字符。它用于表单下方的按钮,上面写着“CopyLink __”,上面有一个挂锁,表示当他们复制他们所在页面的链接时,将不会访问“copylink _”版本
你好,我是第一次尝试使用 bootstrap 字形图标,但它没有按我想要的方式工作。 我想要左右图标,所以我选择了 glyphicon-chevron-left 和 glyphicon-chevron
我正在开发一款教授日语的应用程序。问题是,系统使用的默认字体是使用字符的中文变体,而不是日文变体。例如,汉在中文字体中看起来与在日文字体中略有不同,即使它们是相同的 Unicode 代码点。如何指定我
我目前正在实现一个简单的 SVG 文本渲染器。我正在从 SVG 文件中提取我需要绘制的字符的路径信息。 这是存储在 JSON 对象中的字体/字符的所有适当信息: window.font =
当我将鼠标悬停在链接上时,我试图在链接的右侧显示 Bootstrap 字形图标。 我试过同时使用 CSS 和 JS,但它就是行不通。所以我需要一些帮助:) 这就是我想要做的:When i hoover
下面有ajax代码 $.ajax({ type: "POST", url: "shoppingcart_service.asmx/RegisterSub
我正在努力理解这些东西,以便我可以有效地在工作中实现项目的国际化。我刚刚开始,非常想从您的专业知识中了解我是否正确理解了这些概念。到目前为止,这是我从网上收集的内容的简化版本(据我所知): 字符编码
有什么方法可以更改 Eclipse 用于表示空白字符的符号吗?例如,我想将换行符“¶”自定义为更像 Notepad++ 样式“LF”。 我知道如何打开和关闭它们以及更改字体、透明度等。但我还没有找到任
我是一名优秀的程序员,十分优秀!