cocoa - 当第一个 NSView 跨过第二个 NSView 时,NSView 会在另一个 NSView 上留下痕迹

标签 cocoa drawing nsview

我有一个 NSView 子类,可以在其 super View 中拖动。我通过在 mouseDragged 事件处理程序中调用 NSView 的 setFrameOrigin 和 setFrameRotation 方法来移动 View 。每次调用时 View 都会移动和旋转。

我有一个 super View 包含这些 View 的多个实例。我遇到的问题是,当一个 View 被拖到另一个 View 上时,它会在它所遮盖的 View 上留下伪影。我录了a short video这在行动中。不幸的是,由于视频压缩,伪像不是很明显。

我强烈怀疑这与同步平移和旋转有关。 Quartz 调试显示,当另一个 View 拖过遮挡(或被遮挡) View 的矩形时,该矩形会更新( video here );不知何故,这个矩形被绘图引擎错误计算,所以应该重绘的 View 部分没有被重绘。

问题是我不知道如何解决这个问题。我找不到任何方法在文档中手动指定更新矩形,我也不确定这就是需要发生的事情。有任何想法吗?谢谢!

最佳答案

您还可以考虑使用 CALayers 而不是 View 。与 View 不同,层旨在与它们的 sibling 堆叠在一起。

对于可能最省力的解决方案,请尝试使 View 受层支持;它可能会也可能不会解决这个问题,但值得一试。

关于cocoa - 当第一个 NSView 跨过第二个 NSView 时,NSView 会在另一个 NSView 上留下痕迹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1317269/

相关文章:

swift - 在我的 swift 实现中逐个读取字符串 char 非常慢

cocoa - 当 mainWindow 改变时重绘 NSView

multithreading - Cocoa 中的多个 UI 线程

macos - NSView拖动操作错误

objective-c - cocoa ,带有核心数据数据源的 TableView

objective-c - 一键执行多项操作

c# - 使用矩形在图像上创建搜索区域

c# - 在没有 SolidColorBrush 的情况下从 Color 获取 Brush

c++ - gtkmm 绘制单个像素

Cocoa - NSMenuItem 中的自定义 NSView 将不会绘制