gpt4 book ai didi

macos - 支持图层的 NSView 旋转和倾斜同级

转载 作者:行者123 更新时间:2023-12-03 16:00:21 30 4
gpt4 key购买 nike

我对图层支持的 NSView 及其 sibling 有一个奇怪的问题,其中一些在添加到附加到旋转 super View 的现有 View 层次结构中时无法正确呈现。以下是详细信息。

问题

- NSScrollView (layer can be here)
- NSClipView (or here)
- Document View (or even here)
- Some *rotated* subview
- { Problematic sublings }

因此,层次结构本身相当简单和常见:带有一些文档的 ScrollView ,文档 subview 代表一些内容。就我而言,它是图形内容并且可以旋转。旋转 View 可以有一些额外的 subview - 各种标记、控制点等,这就是当我使用 CALayer 作为后端时我面临图形倾斜的奇怪问题的地方: Issue illustration

相机图片单独渲染,它们不是此 View 树的一部分,请注意标记和按钮。

正如您在图像上看到的,我有一些带有 subview 的测试 View (只是随机按钮)。右侧的对象始终正确渲染。根据我的测试,每个在 [0, pi/2] 之间具有 frameRotation 的 NSView 都渲染正常。左侧的对象已渲染模糊,看来该项目的缓存缓冲区太小。当frameRotation[pi/2, pi]范围内时,就会发生这种情况。

最奇怪的事情

“实时轮换”中不会出现此问题。 IE。如果我只是更改设置层次结构的frameRoation,每个 subview 都在其位置上,那么一切都会正常工作。但是,当将 subling 添加到已经旋转的对象时 - 它会出现错误并给出模糊的外观。

在我的应用程序中,当用户单击该项目时,会出现特殊的 subview ,即同级 View 被添加到 super View 中的那一刻。

后端层似乎有一些 subview 的缓存缓冲区,并且当 Root View 旋转时,其中一些 subview 的大小计算错误。

它是如何实现的以及我尝试了什么

  1. 这些 View 非常简单和标准,我尝试过推送[view
    setWantsLayer:YES]
    到层次结构的 Root View : ScrollView ,剪辑 View 、文档 View ,每次结果都是一样的。不手工制作图层,无图层主机。
  2. 内容 View 、同级 View 以及实际上整个 View 树(上述 View 除外)没有层。尽管如此,我尝试为各种项目打开图层但没有成功。
  3. 我尝试强制更新(setNeedsDisplay)后端层,但没有成功
  4. 完全重新设置图层似乎有效,但比较困难。

解决方案?

实际上,这就是问题所在。有人遇到过这样的问题吗?也许有人知道如何强制该层删除所有缓存并完全更新?到目前为止,我只有两个解决方案:要么完全删除图层(有效,但也会关闭所有养眼的东西),或者重新设置图层,调用 setWantsLayer:NO ,然后调用 setWantsLayer:YES。这个性能很糟糕。

最佳答案

您已经写道您尝试过“setNeedsDisplay”。你是从主线程调用这个方法吗?在我的一个应用程序中,如果我从另一个线程调用 setNeedsDisplay,则不会发生任何情况。如果您想确保显示无效,请像这样使用调度:

dispatch_async(dispatch_get_main_queue(), ^{

[view setNeedsDisplay:YES];
});

此外,请查看您的 IB 检查器。有时,图层支持的 View 不喜欢与非图层支持的 View 混合。确保在“View Effects Inspector”中为根图层的所有 subview 启用图层支持。

(在我的程序中,如果关闭层支持,有时 NSButtons 会消失)

关于macos - 支持图层的 NSView 旋转和倾斜同级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14957047/

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