gpt4 book ai didi

objective-c - 设计问题 : Core Animation, NSCollectionView 和 NSCollectionViewItems

转载 作者:搜寻专家 更新时间:2023-10-30 19:44:52 28 4
gpt4 key购买 nike


我正在努力解决一个设计问题:我有一个包含多个项目的 NSCollectionView(它绑定(bind)到一个 NSArrayController,而后者又绑定(bind)到一个 NSManagedObjectContext)。我决定以编程方式为每个项目绘制 View ,主要是因为我注意到当 Collection View 中的项目超过一定数量时,在项目 View 中嵌套多个 NSView 会产生性能问题.
考虑以下层次结构:NSCollectionView => NSCollectionViewItem -> NSView。 (NSCollectionView 使用的默认值)。我的自定义 NSView 包含多个层,一些是 CATextLayer,其他是常规的 CALayer,它们都一起动画(在同一个 CATransaction) 在他们需要的时候。这里的问题是每个 CALayer 都需要显示一些数据的内容,这些数据可以通过 NSCollectionViewItemrepresentedObject 属性访问...拥有 NSView!我有两个选择(可能更多,我非常愿意接受建议):
- 我将 representedObjectNSCollectionViewItem 复制到它的 NSView,并在整个程序执行过程中保持一致。我不太喜欢这个。
- 我在 NSView 中公开了 CALayer,并在 NSCollectionViewItemsetRepresentedObject:< 中设置了它们的内容/字符串 方法。我更喜欢这个,因为 NSView 中没有保存任何数据(当然,通过图层显示的数据除外)。
我错了吗?有更优雅的解决方案吗?

提前致谢,非常感谢您的帮助。干杯

吉安马可

最佳答案

很晚才发现这个问题,我认为这是一个有趣的设计问题。

如果您还没有破解这个或者不喜欢您的任何一个解决方案:

我建议编写一个 NSCollectionViewItem 子类来观察 self.representedObject 键路径,并在模型对象更改时刷新其 View 和 subview 。

NSCollectionViewItem 是一个 NSViewController,这意味着它应该负责管理它的 View 。您可以通过将它使用的 View 层作为其模型对象的面向用户的表示形式保存在其 representedObject 属性中来尊重这一点。因此,通过使用 KVO 观察模型的所有必要属性,您应该有一个整洁的地方来调用所有与“渲染”模型相关的 View 操作。您应该可以完全控制此漏斗是要使用 NSView API 还是 CALayer API。

根据您的原型(prototype)项目 View 的复杂程度、项目集的大小和易变性、UI 的“活跃度”要求以及其他因素,您可能能够对以下项目进行非常粗粒度的观察模型,或者需要一个非常细粒度的模型——我希望你已经习惯了使用 KVO API!

我也很想知道你最后做出了什么选择。

关于objective-c - 设计问题 : Core Animation, NSCollectionView 和 NSCollectionViewItems,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8260823/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com