0

我遇到了 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 项目,因为这就是问题所在。

提前谢谢各位

本杰明

4

1 回答 1

0

isOpaque 只是对系统的提示。它不会阻止其他视图绘制它们的内容,它只是意味着它有时可以跳过让其他视图更新它们的内容。

如果您的视图是不透明的,它应该将自己绘制为不透明并完全填充其边界。

于 2014-02-15T19:40:50.813 回答