【问题标题】:Shadow inside text on NSTextField/NSTextFieldCelNSTextField/NSTextFieldCel 文本内的阴影
【发布时间】:2013-02-12 21:03:20
【问题描述】:

我已经尝试了一两天来尝试在 NSTextField 的文本内绘制阴影(并使前景色透明,因此您所看到的只是文本内的阴影)。我还没有达到理想和实际的结果。我唯一的成功是将文本转换为NSBezerPath,从 NSTextFieldCell 的框架中减去它并使用setClip 方法进行裁剪(addClip 在这种情况下是不够的,它会留下背景) .不幸的是,将文本转换为NSBezerPath 会使文本的边缘看起来参差不齐且过度拉直。有没有一种有效且体面的方法可以使用 CoreGraphics 蒙版和剪辑来实现这一点,因为我无法实现这一点。

我在 Xcode IDE 中寻找的效果非常相似,如果您没有打开调试会话并转到调试器导航器,它会在子类 NSTextField 中显示“无调试会话”,它绘制里面有阴影的文本。这几乎就是我所追求的。任何关于从哪里开始以及如何做到这一点的见解都会很棒。

我当前的代码的粘贴箱(工作,但次优且不工作):http://pastebin.com/4pTv8ZWm

【问题讨论】:

  • 我以为这很容易,但问题是当您绘制阴影 id 时,文本的 alpha 值为 0,阴影不会被绘制。见这里:stackoverflow.com/questions/8170678/…
  • 好的,我认为有一些轻微的沟通不畅。我试图不使用 CGPath/NSBezierPath 作为路径使文本看起来呈锯齿状,因为它们的抗锯齿与文本不同。我确实使用贝塞尔路径让它工作了,但文本看起来很糟糕,这就是我寻找更好方法的原因。

标签: objective-c cocoa core-graphics shadow nstextfield


【解决方案1】:

你玩过 IB 中 NSTextField 的 shadow 属性吗?您应该能够在文本上使用稍微偏移的阴影效果以及正确的 Alpha 透明度混合来获得非常接近的效果。

【讨论】:

  • 这只适用于外部阴影。 [文本颜色] 的 alpha 透明度混合将是一个问题,因为它需要为零。
  • 我不确定我是否应该感到震惊(或不)Apple 会经历如此困难来创建一个标签,该标签在 IDE 中显示的时间为大多数 Apple 用户不会的 10%'永远不要碰。我想知道他们是否只有用于该文本的自定义字体....
  • 我对此表示怀疑,但这是可能的。我会检查 F-Script,但它总是让 Xcode 崩溃,所以我无法判断。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-16
  • 2012-09-29
  • 2012-12-08
  • 2015-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多