我有一个 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/