将前景图层添加到带有垃圾收集的IKImageBrowserView项目时,CALayer会闪烁

时间:2010-09-22 01:20:03

标签: cocoa ikimagebrowserview

我正在尝试实现一种类似于Apple的ImageBrowserViewAppearance示例代码中的技术(位于此处:http://developer.apple.com/library/mac/#samplecode/ImageBrowserViewAppearance/Introduction/Intro.html),其中CALayers生成在IKImageBrowserView中的项目之上,以自定义外观图像浏览器中的对象。

然而,当我打开垃圾收集时,我遇到了一个奇怪的问题,我可以在Apple示例代码中重现它。只需打开目标中的垃圾收集,然后构建并启动ImageBrowserAppearance示例应用程序。然后,使用“添加照片...”按钮将一些照片添加到图像浏览器。

现在,单击IKImageBrowserView的空白部分,然后单击并拖动以开始在浏览器视图中选择多个项目。当您拖动选择框时,您应该注意到有时某些项目的图钉和光泽叠加层会闪烁并短暂出现在IKImageBrowserView的左下角。所有的CALayers似乎偶尔会这样做,我看到白色的滑动区域也会闪烁到左下角。

当我在自己的代码中模仿该技术时,我(毫不奇怪)也可以重现此徽章闪烁。但是,当垃圾收集关闭时,此问题将消失。

任何人都知道这里可能出现什么问题?我想在我的应用程序中使用垃圾收集与此技术相结合,但闪烁有点烦人。

2 个答案:

答案 0 :(得分:1)

我暂时将this加入书签,但Apple更改了网址和文字。幸运的是,当我bookmarked it时,我引用了它:

  

核心图形API(Quartz 2D)看到编译为使用垃圾收集的应用程序的绘图性能降低了大约25%。

“绘图性能降低25%”文本被重写为“代码执行中的轻微开销”为10.5。也许苹果公司将它固定为10.6。你说的是Core Animation,而不是Core Graphics。

尽管如此,Core Animation最终还是要与Core Graphics交谈,也许这个性能问题并没有消失,而且你被它咬了。

答案 1 :(得分:0)

我愚弄了这一点,并且可以确认我在运行GC的情况下运行相同的行为。事实上,如果你足够耐心并且使用箭头键一次慢慢地改变选择一个图像,最终它会触发行为,你可以看到视图中一个图像的图层显示在左下角而不是在图像的顶部。我无法找到任何关于何时发生的模式,或者选择哪个图像与哪个图像缺少图层之间的任何关系。我假设无论出于何种原因,这些图层的帧原点都设置为{0,0},但如果我知道原因,那就哎呀。