工具栏翻转的图像(新建自 2009年1月种子)
一个常见但不正确的做法是 呼叫setFlipped:YES
是 您打算绘制图像成翻转的 图形上下文。这是不正确的 ,因为如果图像稍后绘制为 到正常的未翻转上下文中,则图像将颠倒显示。 但是,Leopard和更早版本包含 的一个bug,其中 NSToolbarItem
(通过setImage:
)设置的图像 将忽略它们的isFlipped
属性。 SnowLeopard修复了在SnowLeopard上使用10.6 SDK编译的应用程序 的此bug;因此,当您的 应用程序重新编译时,一些 应该在 Leopard中颠倒过来的图像将开始这样做。
如果你重新编译的 雪豹应用程序,并发现你 工具栏项的图像绘制颠倒 下降,则表明你是 调用setFlipped:YES
地方 你的代码中。您应该删除 这些呼叫,并用正确处理翻转的上下文的方法替换图片 。关于setFlipped:
的 讨论请参见这些 发行说明以获取更多讨论。
NSImage中:贬低 - [NSImage中 setFlipped:],加入描绘方法 尊重上下文flippedness(新泽西 自2008年WWDC)
的翻转NSImage
的属性是 被广泛误解。我们 不赞成使用SnowLeopard,而 用更少的 替代它的典型用途,容易出错的API。
该属性描述内部坐标系 NSImage
的方向 。正如上海华 从来不计较的 其子视图的flippedness,一个NSImage
的用户应该不会在意它的flippedness。
典型的(有缺陷)的使用情况是 尝试调用[image setFlipped:[[NSGraphicsContext currentContext] isFlipped]]
前夕 图纸,但这并不 完成预期目标。如果缓存之前称之为 ,然后 交涉最终倒挂缓存下来 和翻盖被吸收到 缓存。如果在缓存之后调用,则它不起作用 - 已缓存的 表示已被假设为包含任何必要的翻转。 在前一种情况下,如果NSImage
是 绘制其他地方后,它结束了 在是地方,这是 也令人困惑,因为这个错误和错误的 表达相距甚远倒挂。 缺乏有关 flippedness理解也频繁的执行代码不佳,在 人们作无谓的 中间缓冲器来解决 感知框架错误的 源。 框架根据设计行为, 但与预期相反,并且 语义不是所有有用的。 这也是难以改变的-[NSImage isFlipped]
, 的 语义,因为大量的代码是非常密切 依赖于当前的行为。 而不是尝试此操作,我们已弃用该属性 。
我们提供了一个简单而正确的 方式绘制的翻转或 unflipped背景下,这是一个平局 方法,可以考虑上下文 flippedness图像。我们还在-bestRepresentationForRect:context:hints:
中添加了一个匹配提示的 提示参数。
- (void)drawInRect:(NSRect)dstRect fromRect:(NSRect)srcRect operation:(NSCompositingOperation)op fraction:(CGFloat)alpha respectFlipped:(BOOL)respectContextIsFlipped hints:(NSDictionary *)hints;
通YES
为respectFlipped
得到新奇的行为。一个 注意那些了解CTM ,并担心这种方法有一个奇怪的 交互,其中修改CTM 可能无法对图像产生影响 绘图:情况并非如此。此 方法根据 [[NSGraphicsContext currentContext] isFlipped]
分支行为。修改CTM可能 把你的轴倒挂,但 不会改变的 -[NSGraphicsContext isFlipped]
结果。它们完全正交。
的-[NSImage setFlipped:]
第二有效用途是指定 flippedness经由-[NSImage lockFocus]
获得 上下文。有 的情况下,例如通过NSLayoutManager
直接 ,需要翻转上下文 。为了弥补这种情况下,我们 添加
- (void)lockFocusFlipped:(BOOL)flipped;
这不会改变对 的 图像本身,只有上下文的状态,这会锁定对焦。这意味着 (0,0)位于左上方,沿着Y轴的正值 在锁定的 上下文中向下。
我的代码中没有任何地方使用了setFlipped,所以这肯定是某种奇怪的错误,但是明确地设置Images不会被翻转就是一个窍门。什么可能导致什么?另外,我只注意到在NIB中发生了这种情况,我存储了这组特定的窗口。另一个NIB中的主窗口未受此影响。 – 2011-01-21 05:15:09
您可以在 - [NSImage setFlipped:]上设置一个符号断点并查看它何时发生变化。 – 2011-01-21 07:25:18