Objective c 将patternimage用于NSScrollView中的视图
我有一个相当大的问题,我真的无法解决自己 结果应该如下所示: 这张图片是用photoshop制作的,是我试图构建的界面的一部分 在中间你会看到一些东西,那应该是一个项目列表,你应该能够滚动,如果列表比视图大的话 因此,我制作了一个如下的滚动视图:(由于某些原因,我无法在interface builder中执行此操作,并希望它以编程方式工作) 然后我创建内容视图并将图案图像设置为背景色:Objective c 将patternimage用于NSScrollView中的视图,objective-c,cocoa,background-image,clipping,nsscrollview,Objective C,Cocoa,Background Image,Clipping,Nsscrollview,我有一个相当大的问题,我真的无法解决自己 结果应该如下所示: 这张图片是用photoshop制作的,是我试图构建的界面的一部分 在中间你会看到一些东西,那应该是一个项目列表,你应该能够滚动,如果列表比视图大的话 因此,我制作了一个如下的滚动视图:(由于某些原因,我无法在interface builder中执行此操作,并希望它以编程方式工作) 然后我创建内容视图并将图案图像设置为背景色: NSClipView *contentView = [[NSClipView alloc] i
NSClipView *contentView = [[NSClipView alloc] initWithFrame:NSMakeRect(0, 0,
[projectsListView frame].size.width, [projectsListView frame].size.height+(98*2))];
[contentView setBackgroundColor:[NSColor colorWithPatternImage:[NSImage imageNamed:@"BoxLineBackground"]]];
[contentView setDrawsBackground:YES];
然后将视图设置为文档视图:
[projectsListView setDocumentView:contentView];
应该有用吧?
但是,内容视图会被剪裁,在滚动时显示如下:
我尝试了这个方法来修复它,但它没有任何作用:
[[projectsListView documentView] setCopiesOnScroll:NO];
我也尝试过这个,但它导致contentview根本不滚动。
图像保持不变,但我可以正常移动滚动条
[[projectsListView contentView] setCopiesOnScroll:NO];
如果我尝试使用setContentView:而不是使用setDocumentView设置contentview:
它可能会工作,但滚动条不见了,因此也不能正常工作
我真的很想使用patternimage方法,因为我不知道列表的长度。这取决于用户
另外一个问题是要把整件事都整好,但这并不重要。我尝试使用透明边框图像,并使用NSImageView覆盖NSScrollView,但这同样会导致损坏,因为它会将图像视图的覆盖部分与scrollview的内容一起剪切和移动
谁有想法,如何实现这一点
多亏了而不是重新发明控制盘,该界面应该使用基于视图的
NSTableView
实现。然后可以在Interface Builder中创建表格单元格UI,您可以使用各种NSTableView
委托方法控制单元格的背景<代码>NSTableView将在正确滚动时处理重绘
要处理图案颜色,只需将单元格的背景设置为NSTableCellView
的自定义子类,并实现图案绘制代码
尽管如此,您遇到的问题是由于
NSScrollView
图形优化造成的。您可以通过在NSScrollView
实例上调用[[yourScrollView contentView]setCopiesOnScroll:NO]
来关闭此功能。您也可以在Interface Builder中进行设置,只需取消选中“滚动复制”复选框。此界面应使用基于视图的NSTableView
来实现,而不是重新发明控制盘。然后可以在Interface Builder中创建表格单元格UI,您可以使用各种NSTableView
委托方法控制单元格的背景<代码>NSTableView将在正确滚动时处理重绘
要处理图案颜色,只需将单元格的背景设置为NSTableCellView
的自定义子类,并实现图案绘制代码
尽管如此,您遇到的问题是由于
NSScrollView
图形优化造成的。您可以通过在NSScrollView
实例上调用[[yourScrollView contentView]setCopiesOnScroll:NO]
来关闭此功能。您也可以在Interface Builder中设置此选项,只需取消选中滚动复制复选框。我通过在NSScrollView
上设置背景色,而不是在NSClipView
上设置背景色,解决了此问题
我认为在这种情况下背景是静态的,因此我需要将其设置为内容视图,但它工作得很好,并与内容视图一起滚动
谢谢Rob Keniger的回答。我可能会尝试一下。我通过在
nscrollview
上设置背景色,而不是在NSClipView
上设置背景色,解决了这个问题
我认为在这种情况下背景是静态的,因此我需要将其设置为内容视图,但它工作得很好,并与内容视图一起滚动
谢谢Rob Keniger的回答。我可能会尝试一下。正如我所说,我确实尝试过设置复制的nscroll。然而,它并没有像预期的那样起作用。正如我所说的,我确实尝试了setcopiedenscroll。然而,它并没有像预期的那样起作用。
[[projectsListView contentView] setCopiesOnScroll:NO];