可可 - 高效的视图绘图

时间:2011-01-18 08:24:20

标签: cocoa macos nsview

在我的程序中,我正在实现一个自定义视图,有点像表视图。为此,我已经将NSView子类化了。现在我的问题是,绘制所有表格视图单元格的最有效方法是什么。我应该只使用NSViews还是其他可能的东西,比如CALayers?

谢谢!

P.S。:这是在Mac OS X上,不是在iOS上。

1 个答案:

答案 0 :(得分:1)

根据您的问题和评论,我提出两种选择:

NSCollectionView / NSCollectionViewItem - 仅当所有“单元格”(原型视图的实例)具有相同尺寸时,此选项才有用。也就是说,你不能拥有比其他更宽或更高(或更窄或更短)的那个。这高度高效,是AppKit的一部分。即使使用单列和 n 行,它也可以像魅力一样。

自己动手 - 这更难,但会给你灵活性。就像NSCollectionView / NSCollectionViewItem一样,你有一个视图作为容器,你理想情况下你可以重用一个视图来绘制它所显示的各种“项目”。使用相同的视图设置其表示的对象并将其“标记”到位(构成并绘制它),您可以一次性浏览整个集合,然后使用与实时,活动视图相同的视图进行任何选定的聚焦你有的项目。更快:使用可重复使用的项目视图滚动并缓存每个项目的图像和大小,并从缓存中绘制除所选项目之外的所有项目(这将使用在其正确位置构建的实时,真实视图,更新其自身的缓存图像当它的内容在未被选中时改变)。更快的速度:1个实时视图和1个“用于缓存”视图,并且仅绘制与可见矩形相交的缓存图像的计算范围(没有“实时”/选定视图)。注意:每次容器的框架宽度发生变化时都必须重新进行缓存,因为可能水平收缩意味着所有项目都会垂直增长。如果可以的话,利用NSOperation / NSOperationQueue来处理后台缓存,只标记在所有缓存项0 - n (其中 n )的情况下重新显示与可见矩形相交的最高索引项目可用。

我在自己的一个应用程序中使用非常接近后者的东西,其中“item”是具有不同长度文本的条目。我没有采用我在自己的解决方案中提到的所有策略,但大多数并且性能提升非常令人满意。 : - )

希望这有帮助。