我有一个IKImageView,我正在将由NSImages制成的CGImages放入其中。然而,普通的200DPI 8.5/11页面需要大约3秒钟才能出现,在屏幕上一次出现大约2英寸(屏幕)的矩形。这真的很恼人。有没有办法解决这个问题?
或者,有没有一种方法来双缓冲视图?有两个IKImageViews并绘制到一个视图中,然后显示它?
ETA:将我的滚动视图加倍(内部带有ikimageviews),然后绘制到它们中,然后取消隐藏它们,似乎并没有什么帮助……或者,也许有点帮助,但不是很多
我使用instruments进行了一些探索,并发现在memcopy中完成了大量工作。
我不确定这告诉我什么......编辑:记录一下,问题不在数据大小上。我有一个旧版本的程序,使用已弃用的快速绘图方法调用。当我将图像放大到300%,以便一个屏幕像素=一个图像像素,因此需要使用整个图像时,它仍然可以轻松地翻页。那个写这个程序的人正在嘲笑我,因为他的版本在他古老的10.3 G5上比在我的最新英特尔盒子上运行得更快,至少快了10倍。
或者,有没有一种方法来双缓冲视图?有两个IKImageViews并绘制到一个视图中,然后显示它?
ETA:将我的滚动视图加倍(内部带有ikimageviews),然后绘制到它们中,然后取消隐藏它们,似乎并没有什么帮助……或者,也许有点帮助,但不是很多
我使用instruments进行了一些探索,并发现在memcopy中完成了大量工作。
22 commpage [libSystem.B.dylib] 78.0 __memcpy
21 ImageIO 37.0 CGImageReadGetBytesAtOffset
20 ImageIO 37.0 CGImageReadSessionGetBytes
19 ImageIO 37.0 myTIFFReadProc
18 libTIFF.dylib 37.0 TIFFReadRawStrip1
17 libTIFF.dylib 37.0 TIFFFillStrip
16 libTIFF.dylib 37.0 _cg_TIFFReadEncodedStrip
15 ImageIO 37.0 copyImageBlockSetTIFF
14 ImageIO 37.0 ImageProviderCopyImageBlockSetCallback
13 CoreGraphics 37.0 CGImageProviderCopyImageBlockSet
12 CoreGraphics 37.0 img_blocks_create
11 CoreGraphics 37.0 img_blocks_extent
10 CoreGraphics 37.0 img_interpolate_extent
9 CoreGraphics 37.0 img_data_lock
8 CoreGraphics 37.0 CGSImageDataLock
7 libRIP.A.dylib 37.0 ripc_AcquireImage
6 libRIP.A.dylib 37.0 ripc_DrawImage
5 CoreGraphics 37.0 CGContextDrawImage
4 ImageKit 37.0 -[IKImageLayer drawInContext:]
3 QuartzCore 37.0 tiled_layer_render(_CAImageProvider*, unsigned int, unsigned int, unsigned int, unsigned int, void*)
2 QuartzCore 37.0 CAImageProviderThread(void*)
1 libSystem.B.dylib 37.0 _pthread_wqthread
0 libSystem.B.dylib 37.0 start_wqthread
我不确定这告诉我什么......编辑:记录一下,问题不在数据大小上。我有一个旧版本的程序,使用已弃用的快速绘图方法调用。当我将图像放大到300%,以便一个屏幕像素=一个图像像素,因此需要使用整个图像时,它仍然可以轻松地翻页。那个写这个程序的人正在嘲笑我,因为他的版本在他古老的10.3 G5上比在我的最新英特尔盒子上运行得更快,至少快了10倍。