我遇到了 Cocoa 及其视图重绘层次结构的问题。
我目前正在测试仪表样式控件中的显示(音频)级别,并且我正在使用来自苹果的 MatrixMixerTest 示例项目的 MeteringView 类。这个类正在绘制仪表,只绘制变化的差异,这看起来是一个非常有效的类。
我的项目分为 2 个拆分视图,其中一些是 NSCollectionViews(滚动视图、剪辑视图),而另一些只是静态视图。如果我将仪表添加到那些“静态”视图中,当这些视图调用 setNeedsDisplay:YES 时它们可以正常工作。如果将仪表添加到 CollectionView 项目的视图中,它会被渲染,但会丢失其绘制的“旧级别”部分及其角/背景。我认为发生这种情况是因为 CollectionView 项目也被称为重绘(具有背景图像)并且一切都消失了。它正在绘制一些当前正在变化的部分(绘图作品)。
有没有办法防止 Item 本身被重绘?或者,我不知道为什么在那些静态视图中没有发生这种情况,因为这些视图也有背景图像,但不会在仪表上绘制。
CollectionView 中是否有一些技巧或与“正常”视图中的不同之处?
编辑:阅读有关 isOpaque (MeteringView isOpaque = YES) 后意味着如果设置为 yes,则不应调用父视图 drawRect。好吧,这适用于静态视图,那些 MeteringViews 不调用父母 drawRect,但是 CollectionView 中的那些。我不知道为什么。
编辑 2:我给这个主题另一个标题,因为 MeteringView 中的 isOpaque=YES 并没有停止在 CollectionView 中调用父母 drawRect,在正常视图中它正在工作。有什么需要了解的吗?我必须停止重绘 CollectionView 项目,因为这就是问题所在。
提前谢谢各位
本杰明