0

我在下面awakeFromNib中写道:

layer = [[CALayer alloc] init];
[layer setGeometryFlipped:YES];
...

此代码在 MacOS 10.8 上不起作用,但在 10.7 中起作用,我在initWithFrame中尝试了 setGeometryFlipped,得到了相同的结果。

有人知道原因吗?

4

1 回答 1

0

我在“ Application Kit Release Notes for OS X v10.8 ”中找到了一些提示:

• 在 10.8 中,AppKit 将控制 10.8 之前的版本,翻转视图将通过在每次调用 setFrameSize: 时更新图层来显式控制图层的位置。但是,这与允许 CoreAnimation 在没有来自 AppKit 的输入的情况下在后台线程上执行帧大小动画相冲突。为了解决这个问题,AppKit 现在控制支持 CALayer 上的 -geometryFlipped。在 10.8 之前,anchorPoint 也设置为 (0,0) 或 (0,1) - 它取决于是否被 isFlipped 的 superview。在 10.8 上,图层的框架现在等于视图的框架。anchorPoint 也始终设置为 (0,0),因为现在位置相等。为了正确控制图层的翻转状态,请在 NSView 上覆盖 -isFlipped。
。。。。。。 CALayer 上的以下属性(无论是“layer-hosted”还是“layer-backed”):geometryFlipped、bounds、frame(隐含)、position、anchorPoint、transform、shadow*、hidden、filters 和合成过滤器。仅在 10.8 及更高版本上链接的应用程序才会更改 geometryFlipped。使用适当的 NSView 覆盖方法来更改这些属性。

所以,我使用了覆盖 isFlipped 方法而不是 geometryFlipped。它工作正常。

于 2013-08-22T13:30:39.443 回答