【发布时间】:2011-11-24 17:35:43
【问题描述】:
我正在努力解决一个设计问题:我有一个包含多个项目的NSCollectionView(它绑定到NSArrayController,而NSArrayController 又绑定到NSManagedObjectContext)。我决定以编程方式为每个项目绘制视图,主要是因为我注意到当集合视图中有超过一定数量的项目时,在项目视图中嵌套多个 NSViews 会产生性能问题。
考虑以下层次结构:NSCollectionView => NSCollectionViewItem -> NSView。 (NSCollectionView 使用的默认值)。
我的自定义NSView 包含多个图层,一些是CATextLayers,另一些是常规CALayers,并且它们都在需要时一起动画(在同一个CATransaction 内)。这里的问题是每个CALayer 需要显示一些数据的内容,这些数据可以通过NSCollectionViewItem... 的representedObject 属性访问,它拥有NSView!
我有两个选择(可能更多,我非常愿意接受建议):
- 我将representedObject 从NSCollectionViewItem 复制到它的NSView,并在程序执行过程中保持一致。我不是很喜欢这个。
- 我在NSView 中公开CALayers,并从NSCollectionViewItem 的setRepresentedObject: 方法中设置它们的内容/字符串。我更喜欢这个,因为NSView 中没有保存数据(当然,通过图层显示的数据除外)。
我错了吗?有没有更优雅的解决方案?
提前感谢,我真的很感激帮助。 干杯
吉安·马可
【问题讨论】:
-
一个非常好的问题,我猜很少有人知道正确的答案。一个问题..你在哪里设置你的
CALayer?我正在尝试做同样的事情,并且在我将之前的 View 托管元素添加到NSArrayController之前尝试这样做时感觉有点愚蠢。NSView和CALayer之间的心理差距是巨大的,尽管我确实认为苹果公司保持动画 API 非常简单。
标签: objective-c macos core-animation calayer nscollectionview