问题是,每当我展开或折叠一个项目时,所有行都被移动,但是图层的内容仍然显示在更改大纲之前的位置.
滚动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层所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)