【发布时间】:2013-12-24 06:28:01
【问题描述】:
我有一个 NSScrollView,它的 documentView 是一个巨大的 NSView,由许多子 NSImageView 组成,它们在地图中充当图块。 (整个地图是 NSView,由于它比屏幕尺寸大得多,它嵌入在滚动视图中。
我能够以正确的图块位置显示地图,并使用条形/手势滚动。但是..当我启用放大以能够缩放时,会发生以下情况: 不知何故,我假设自动布局在下面添加了瓷砖边框,我不知道如何禁用它们。这些肯定是边界,因为我已经检查了数千次我的图块和子视图的大小相同.. 那么这是从哪里来的呢? 我在 iOS 开发方面有相当多的经验,但对 NSScrollView 完全迷失了(我的委托方法在哪里?)。如何禁用滚动视图的这种行为?
这是我的子视图代码:
- (void)setupSubViews
{
NSLog(@"--------Creating subviews!-------");
//first we create the subviews..
//This is the key part, we traverse from top Left, and since OS X coordinates start at bottom left, we need to invert the rows!
for (int i=0; i< NUMBER_OF_COLUMNS; i++) {
for (int j=NUMBER_OF_ROWS-1; j>=0; j--) {
CGRect frame = CGRectMake(i*256, j*256, 256, 256);
NSImageView *newView = [[NSImageView alloc] initWithFrame:frame];
newView.focusRingType = NSFocusRingTypeNone; //I gave this focusRing a try, it didn't work :(
[self addSubview:newView];
}
}
}
这是我将子视图连接到实际图像的地方..
-(void)updateMap:(id)tilesPassed{
if (downloadFinished) {
NSLog(@"--------DRAW RECT-------------");
NSImageView *subView;
NSInteger idx = 0;
for (int i =0; i<[self.subviews count]; i++) {
subView = [self.subviews objectAtIndex:i];
[subView setAllowsCutCopyPaste:NO];
[subView setImageFrameStyle:NSImageFrameNone]; //This doesnt work either :(
MapTile *tile = [tilesArray objectAtIndex:idx];
subView.image = tile.image;
idx++;
}
}
}
【问题讨论】:
-
这看起来真的像一个绘图神器,而不是故意绘制的“边框”。根据您的缩放级别,您可能需要制作稍大的图像,以确保像素舍入不会导致您被要求绘制比绘制正确区域所需的稍小的图像。
-
我的问题是:整个事情需要可缩放(工作)。如果我只使用缩放级别 1,并关闭放大,我看不到线条。它们只会在我放大后出现..
标签: objective-c macos cocoa appkit nsscrollview