У меня есть NSScrollView, чей documentView представляет собой огромный NSView, состоящий из множества суб-NSImageView, которые действуют как плитки на карте. (Вся карта - это NSView, и, поскольку она намного больше, чем размер экрана, она встроена в scrollview).
Я могу отображать карту с правильным расположением плиток и прокручивать ее с помощью полос / жестов. Однако ... когда я включаю увеличение, чтобы можно было масштабировать, происходит следующее: Каким-то образом я ' m предполагая, что автоматическая компоновка добавляет границы плитки ниже, и я не знаю, как их отключить. Это определенно границы, так как я тысячи раз проверял, что мои плитки и вложенные представления имеют одинаковый размер ... так откуда это? У меня есть некоторый опыт разработки для 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++;
}
}
}