对于使用Core Animation图层支持视图的项目工作的任何人来说,遗憾的是,对于未在预先设置的不透明背景上呈现的文本,禁用了子像素抗锯齿(文本平滑).现在,对于能够为其文本设置不透明背景的人(通过setBackgroundColor:调用或Interface Builder中的等效设置),此问题不会出现太多问题.但对于其他人来说,绝对没有办法解决它,这不是一个人们无法忽视的事情.
我已经在网上寻找了两天以上的解决方案,并没有任何可用的东西出现.我想要做的就是创建一个在工作表窗口上设置的文本标签(不是用户可编辑的)(工作表窗口背景是透明的,因此将工作表的内容视图声明wantsLayer为true会禁用窗口上所有标签的文本平滑); 非常简单.我已经看到很多有争议的解决方案(快速谷歌搜索将在许多其他地方提出这个主题),但到目前为止,所有这些解决方案依赖于人们能够并愿意与不透明的背景妥协(你不能在一张纸上使用).
到目前为止,我可以想象的最佳方向是将文本预渲染到文本平滑到图像上,然后像往常一样在图层支持的视图上显示图像.但是,这似乎不可能.我认为可以尝试的"正常"方式是:
NSAttributedString *string = [[self cell] attributedStringValue];
NSImage *textImage = [[NSImage alloc] initWithSize:[string size]];
[textImage lockFocus];
[string drawAtPoint:NSZeroPoint];
[textImage unlockFocus];
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用(很可能是因为调用时drawRect:,图形上下文设置已禁用文本平滑 - 关闭子像素抗锯齿,而使用常规抗锯齿),但更多涉及的解决方案也没有找到这个问题(你在哪里创建自己的图形上下文).
那么如何做这样的事情呢?你能以某种方式"伪造"文本平滑的效果吗?是否有甚至黑客攻击的解决方案可以设置一些东西?我真的不想因为这个愚蠢的问题而放弃核心动画; 它有很多好处,可以节省大量的时间和代码.
编辑:经过大量搜索,我找到了一些东西.虽然线程本身只是重申了我的怀疑,但我想我可能已经找到了解决这个问题的方法:自定义CALayer绘图.Timothy Wood在他的一篇回复中附上了一个示例项目,该项目使用几种技术显示字体平滑,其中一些技术起作用.我会考虑将它集成到我的项目中.
编辑#2:结果,上面的链接也是一个半身像.尽管链接的方法提供了亚像素抗锯齿,但它们在透明背景上也会失败.
尽管自Mac OS X Leopard以来API已经打开,但令人惊讶的是,很少有关于如何正确使用SMJobBless()创建特权助手工具的文档.即使直接从Apple的示例项目中复制代码,也会有很多问题.幸运的是,我已经找到了解决这个问题的方法,并且已经为我的帮助工具工作奠定了基础.
但是,它似乎SMJobBless()只是祝福工具并将其复制,但不会运行它.我已经包括在我的帮助工具的代码main()功能应该运行,但不会(因为NSLog()莫名其妙地不工作,根据我的信息点点已经发现-我试图syslog()荷兰国际集团的一些"世界,你好"类型的字符串,但系统控制台上没有任何内容.没有任何迹象表明辅助工具完全启动.
文档大多没用.它简单地说,在SMJobBless()调用之后,辅助工具是"准备好的",没有任何"准备好"的指示.
此外,Apple的示例不包含任何进程间通信代码,也没有解释应该如何与辅助工具进行交互.你使用分布式对象吗?马赫口?谁知道?关于如何做到这一点,没有官方的说法.
那么,有没有人知道如何完成这项工作?我已经确认已经安装了帮助工具,并且身份验证工作正常,但我根本无法弄清楚如何启动帮助工具并与之通信 - 文档中存在这样的差距,这对于现在来说这是一个谜.这非常令人沮丧; 我不可能是唯一一个有这个问题的人(但在任何地方都没有提到它),并且SMJobBless()显然在某种程度上起作用,因为它是Apple使用的.
(请不要提AuthorizationExecuteWithPrivileges().我没有使用它:它已被弃用,肯定会消失,并且是一个主要的安全漏洞.不,谢谢.)
转换char *为实例的最佳方法是NSString什么?
我使用了这个方法-stringWithUTF8String:,但这并不好:结果最后包含"\n"!
如果一个ObjC函数返回一个带枚举的状态值,有没有办法在Swift 3中获取枚举的字符串?如果我这样做debugPrint("\(status)"),或者print("\(status)")我只是得到枚举的名称而不是值.如果我这样做status.rawValue,我会得到int,但解释并不多.
无论出于何种原因,zsh不喜欢我为我的$EDITOR变量设置命令行参数,但从我所知道的,它不应该是这样的.我见过人们用
export EDITOR='open -Wn'
Run Code Online (Sandbox Code Playgroud)
在他们的〜/ .zshrc文件中,但是当我尝试这样做时,我只是抱怨.
zsh: command not found: open -Wn
Run Code Online (Sandbox Code Playgroud)
有什么理由可能会发生这种情况?设置$EDITOR到'mate','vim'或'open'似乎工作得很好,但'mate -w'并'open -Wn'不起作用.
我在Mac OS X上运行zsh屏幕,我的〜/ .zshrc如下:
# -----------------------------------------------
# Screen Settings
# -----------------------------------------------
# If screen isn't already running, turn it on.
if [[ $STY == '' ]]; then
# Execute screen.
exec screen -aADRU
fi
# -----------------------------------------------
# Startup Scripts
# -----------------------------------------------
cd ~/Desktop
[[ -s "~/.rvm/scripts/rvm" ]] && source "~/.rvm/scripts/rvm"
# …Run Code Online (Sandbox Code Playgroud) 显然,C,C++和Fortran是经典的GNU语言并且得到了全面的支持.我知道Erlang被添加了,因为Erlang社区非常努力地将这个功能添加到autotools,但是Objective-C呢?我认为它在很长一段时间内都得到了原生支持(我模糊地回忆起它在21世纪初期得到支持,早在最新的iStuff爆炸之前).是因为NeXTSTEP的工作人员如此努力吗?
我一直在阅读Calcote出色的autotools书,他们提出了autotools的历史.对我来说,似乎很奇怪,Objective-C在GNU工具中得到了如此强大的支持,因为它(直到最近)使用率很低.
当ARC来到Objective-C时,我尽力阅读Clang项目网站上发布的Objective-C自动参考计数(ARC)指南,以更好地了解它的内容.我在那里发现的(并没有其他地方)提到使用__attribute__声明来表示ARC是否某些代码自动释放其返回值,例如(__attribute__((ns_returns_autoreleased))),或者它是否"消耗"一个参数(__attribute((ns_consumed))等等).
但是,该指南似乎很少说明这些声明所持有的实际必要程度.在运行静态分析器和运行项目本身时,排除它们似乎没有任何区别.这些甚至有所作为吗?用方法标记方法有什么好处__attribute__((objc_method_family(new)))吗?我在ARC上找到的文章都没有提到这些说明者; 也许ARC大师可以说出这些用途.
(就个人而言,我包括所有相关的说明符以防万一,但发现他们使代码混淆和混乱.)
因为我目前正在设立中使用新的服务器,我已经使用了很多的命令行程序,如curl和wget,而且我发现他们做一些有趣的事情.当在终端中运行时,他们会打印当前的进度(例如,54%将在55%到位,而不是在下一行打印55% - 下载一个大文件,你会明白我的意思).
我一直在想程序如何做到这一点.写作对stdout我来说并不是什么新鲜事,但我很困惑这样的事情会起作用.我曾尝试过写作stdout,然后再向后寻求写作; 打印退格字符('\b'),打印新东西; 等等,但似乎没有任何作用.
Objective-C或C中没有API来执行此操作吗?(例如,C有ungetc(),但没有unputc()).有没有可以达到这个目标的黑客?
我想更多地了解一些有趣的事情......
谢谢!