objective-c – NSOutlineView中的NSView层

objective-c – NSOutlineView中的NSView层,第1张

概述我正在尝试创建一个自定义NSView,托管CALayer层次结构以执行高效显示.然后将NSView嵌入到由基于视图的NSOutlineView显示的NSTableCellView中. 问题是,每当我展开或折叠一个项目时,所有行都被移动,但是图层的内容仍然显示在更改大纲之前的位置. 滚动NSOutlineView似乎刷新了这些图层,并在这一点上重新同步它们的行. 我已经使用仪器调试了这种行为,似乎滚 我正在尝试创建一个自定义NSVIEw,托管CALayer层次结构以执行高效显示.然后将NSVIEw嵌入到由基于视图的NSOutlineVIEw显示的NStableCellVIEw中.

问题是,每当我展开或折叠一个项目时,所有行都被移动,但是图层的内容仍然显示在更改大纲之前的位置.

滚动NSOutlineVIEw似乎刷新了这些图层,并在这一点上重新同步它们的行.

我已经使用仪器调试了这种行为,似乎滚动引发了一个布局 *** 作,它使用setposition:调用来更新层,这些调用在展开或折叠项目时应该发生.

以下是一个承载NSVIEw子类的简单图层的示例代码.

@interface TestVIEw : NSVIEw@end@implementation TestVIEw- (instancetype)initWithFrame:(NSRect)frameRect{    self = [super initWithFrame:frameRect];    CAShapeLayer* layer = [CAShapeLayer layer];    layer.bounds = self.bounds;    layer.position = CGPointMake(NSMIDX(self.bounds),NSMIDY(self.bounds));    layer.path = [NSBezIErPath bezIErPathWithovalInRect:self.bounds].CGPath;    layer.fillcolor = [NScolor redcolor].CGcolor;    layer.delegate = self;    self.layer = layer;    self.wantsLayer = YES;    return self;}@end

我已经尝试了很多潜在的解决方案,但我找不到任何有趣的方法被调用在NSVIEw实例,可以覆盖调用[self.layer setNeedsdisplay]或[self.layer setNeedsLayout].我也在CALayer本身尝试过各种设置器,如:

layer.autoresizingMask = kCALayerWIDthSizable | kCALayerHeightSizable;layer.needsdisplayOnBoundsChange = YES;self.layerContentsRedrawPolicy = NSVIEwLayerContentsRedrawOnSetNeedsdisplay;

任何人都可以帮我弄清楚如何使这个层在NSOutlineVIEw内正常显示?

解决方法 我最后回答了我的问题.问题不在于我的TestVIEw实现方式.我简单地错过了在应用程序中启用CoreAnimation支持的步骤之一.相关参考文献在“核心动画编程指南”中.

基本上,在iOS Core Animation和layer-backing中始终默认启用.在OS X上,必须以这种方式启用:

>链接到QuartzCore框架
>通过执行以下 *** 作之一为一个或多个NSVIEw对象启用图层支持

>在您的nib文件中,使用VIEw Effects检查器为视图启用图层支持.检查员将显示所选视图及其子视图的复选框.建议您尽可能在窗口的内容视图中启用图层支持
>对于以编程方式创建的视图,请调用视图的setWantsLayer:方法,并传递值为YES以指示视图应使用图层.

一旦在任何NSOutlineVIEw的父母上启用了图层支持,就会解决各种故障.

总结

以上是内存溢出为你收集整理的objective-c – NSOutlineView中的NSView层全部内容,希望文章能够帮你解决objective-c – NSOutlineView中的NSView层所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1028034.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存