如何让 NSView 不裁剪其边界区域?

2024-04-19

我在 Xcode 上为 OS X 创建了一个空的 Cocoa 应用程序,并添加了:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    self.view = [[NSView alloc] initWithFrame:NSMakeRect(100, 100, 200, 200)];
    self.view.wantsLayer = YES;
    self.view.layer = [CALayer layer];
    self.view.layer.backgroundColor = [[NSColor yellowColor] CGColor];
    self.view.layer.anchorPoint = CGPointMake(0.5, 0.5);
    self.view.layer.transform = CATransform3DMakeRotation(30 * M_PI / 180, 1, 1, 1);

    [self.window.contentView addSubview:self.view];
}

但是旋转图层的背景被视图的边界区域剪切:

我想从 OS X 和 iOS 的某些版本开始,视图不会剪辑其子视图的内容,而是会显示内部和外部的所有内容?在 iOS 上,我确实看到了这种行为,但我想知道为什么它会这样显示以及如何让所有内容都显示出来? (我已经在 Mountain Lion 上使用最新的 Xcode 4.4.1)。

(注意:如果您尝试上面的代码,您将需要链接到 Quartz Core,并可能导入 Quartz Core 头文件,尽管我想知道为什么我没有导入头文件,但它仍然可以完美编译)


事实证明,如果该行:

((NSView *)self.window.contentView).wantsLayer = YES;

添加到最开始,然后它按预期工作:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{  
    ((NSView *)self.window.contentView).wantsLayer = YES;

    self.view = [[NSView alloc] initWithFrame:NSMakeRect(200, 200, 200, 200)];

    self.view.wantsLayer = YES;

    self.view.layer.backgroundColor = [[NSColor yellowColor] CGColor];

    [self.window.contentView addSubview:self.view];
    self.view.layer.anchorPoint = CGPointMake(0.5, 0.5);

    self.view.layer.transform = CATransform3DMakeRotation(30 * M_PI / 180, 0, 0, 1);

}

因此,看起来如果所有视图都支持图层,那么它的工作方式与 iOS 上的工作方式相同。 (如果有一种快速方法可以自动支持所有视图图层,那就太好了)。

the anchorPoint之前不能移动线addSubview线,否则它是不正确的,尽管我想知道为什么这会产生任何影响。

线路self.view.layer = [CALayer layer];可以删除,如果window.contentView是层支持的。 contentView 和self.view不需要设置图层,我也想知道为什么。

The transform该行不能位于addSubview线,否则它不会旋转,我也想知道为什么。

第三件事是,我想如果我去 Interface Builder 并将 contentView 设为一个类ContentView(子类化NSView),并在其init方法,做一个self.wantsLayer = YES;,那么它也可以工作,但事实并非如此。

但无论如何,上面的代码是有效的,当我了解更多信息时,我会更新上面的原因。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让 NSView 不裁剪其边界区域? 的相关文章

随机推荐

  • SQL Server中保存的SessionId与asp.net运行时生成的SessionId不同

    我已经为 ASP NET 应用程序实现了 SQL Server 会话模式
  • Scala:在运行时替换方法

    假设我有课 class Original def originalMethod 1 现在 假设我有一个例子 val instance new Original 现在是否可以做点什么instance在运行时替换originalMethod用不
  • 使用嵌套 delegate_to 将文件从一台远程服务器复制到另一台远程服务器

    作为用户 我想将文件从节点1复制到节点2 是否可以使用复制模块 delegate to 以下是我试图做的事情 Playbook 从节点 3 运行 Playbook Sample name Gather Facts for all hosts
  • 如何在不指定类型的情况下引用 Java 枚举

    我有一个类定义了自己的枚举 如下所示 public class Test enum MyEnum E1 E2 public static void aTestMethod Test2 E1 lt lt Gives E1 cannot be
  • 如何在Codeigniter中插入动态数据?

    I just want to insert dynamic generated input field data into database My db table having three fields id Auto Increment
  • 在Python中有效地找到scipy/numpy中非零的区间?

    假设我有一个 python 列表或一个 python 一维数组 以 numpy 表示 假设存在连续的元素延伸 如何找到此列表或数组中非零延伸的开始和结束坐标 即索引 例如 a 0 0 0 0 1 2 3 4 nonzero coords a
  • 文本和边框之间的富文本框填充

    是否可以在文本和边框之间的富文本框控件中添加填充 我尝试将一个富文本框停靠在面板内 并将所有四个边的填充设置为 10 这实现了我想要的效果 除非需要富文本框的垂直滚动条 该滚动条也会被填充 有EM GETRECT https learn m
  • 如何在 blogdown 中使用 bibtex 进行引用?

    我想在使用 R 包 blogdown 创建的静态网站页面上使用引用 基于关于 blogdown 的书 https bookdown org yihui blogdown https bookdown org yihui blogdown 这
  • Django - DRF - 调度方法流程

    我正在与 DRF 合作构建一个 API 并使用主类对基于类的视图进行一些验证 class MasterClass APIView def dispatch self request args response super FaveoAPIV
  • 将回调地狱转换为延迟对象

    背景 所以 我有一个相当大的项目 有很多 API 函数 我正在考虑完全转向协程 但由于它们的实现方式是Callback并不是Deferred 我无法有效地使用它们 例如 我想做apiCallOne apiCallTwo and apiCal
  • SqlBulkCopy 的建议批量大小是多少?

    建议的批量大小是多少SqlBulkCopy 我正在寻找一个可以用作性能调整起点的通用公式 我有一个导入实用程序与我的 SQL Server 实例位于同一台物理服务器上 使用自定义IDataReader 它解析平面文件并将它们插入数据库中SQ
  • Vim:如何将一组行重新格式化为一行(如果该行是一个句子)?

    不是重复的在 Vim 中 将文件中的所有行连接成一行的最简单方法是什么 https stackoverflow com questions 391710 in vim what is the simplest way to join all
  • 线段-多边形相交

    问候 我想检测一个线段是否只 接触 多边形或穿过它 人物 解释了我的疑问 如何知道情况A和B的区别 请注意 在这两种情况下 红线在两个顶点处穿过多边形 一个顶点与外部相接触 另一个顶点与内部相交 我有一个段 段相交算法 但我不知道如何正确使
  • 使用 iText 段落之间的图像

    我正在使用 iText 生成自定义 pdf 文档 我尝试了很多 但无法获得包含图像的文本的所需设计 我需要如下所示的输出 我尝试过 Chunk 类和 Paragraph 类 但我无法获得所需的结果 有任何想法吗 你有 至少 两个选择 Use
  • MySQL select for update 返回空集,即使存在一行

    我发现 MySQL 的 选择更新 有一个奇怪的问题 我使用的是5 1 45版本 我有两张桌子 mysql gt show create table tag Tabl
  • 在 Mac 上打开 CSV 文件时出现错误 53

    当我尝试打开 CSV 文件时 我得到 错误 53 找不到文件 我在第四行收到错误 Open FilePath For Input As 1我究竟做错了什么 这是我第一次打开 CSV 请宽容我的代码 Sub opentextfile Dim
  • “Android”中的所见即所得视图编辑器?

    复制 有适用于 Google Android 的表单设计器吗 https stackoverflow com questions 1755860 我想移动一个复选框 以便它显示在与 main xml 内绝对布局下的左上角不同的位置 对于 A
  • 这个文件格式叫什么

    我需要解析以下格式的文件 General Description Some Text Version 4 ProjType 1 Configurations Mice BuildOutputs BuildProject OutputFile
  • 更改背景颜色

    好吧 我对 vim 还很陌生 我不知道如何更改背景颜色 我正在编辑 vimrc 文件来设置这些颜色 但找不到任何背景颜色 我正在使用一个配色方案 我只需要知道如何覆盖它或者要查找什么 以便我可以在我的 color theme vim 文件中
  • 如何让 NSView 不裁剪其边界区域?

    我在 Xcode 上为 OS X 创建了一个空的 Cocoa 应用程序 并添加了 void applicationDidFinishLaunching NSNotification aNotification self view NSVie