У меня есть NSScrollView, чей документView представляет собой огромный NSView, сделанный из многих многих под-NSImageViews, которые действуют как плитки на карте. (Вся карта NSView, и поскольку она больше размера экрана, она встроена в scrollview).Плитки NSImageView внутри NSScrollView нарисовывают нежелательные границы при увеличении
Я могу отобразить карту с правильными положениями плитки и прокручивать ее с помощью баров/жестов. Однако, когда я включаю увеличение, чтобы иметь возможность масштабирования, происходит следующее: Как-то я предполагаю, что авто-макет добавляет границы плитки ниже, и я не знаю, как их отключить. Это, конечно, границы, так как я проверял тысячи раз, что мои плитки и подвалы одинакового размера .. так откуда это происходит? У меня довольно много опыта разработки 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++;
}
}
}
Это действительно похоже на артефакт рисунка, в отличие от «границы», которая намеренно нарисована. В зависимости от уровня масштабирования вам может потребоваться сделать немного более крупное изображение, чтобы убедиться, что округление пикселей не заставляет вас попросить нарисовать немного меньшие изображения, чем необходимо, чтобы нарисовать нужную область. – gaige
Моя проблема: вся эта вещь должна быть масштабируемой (рабочей). Если я использую только уровень масштабирования 1 и выключу Magnification, я не вижу линий. Они появляются только после увеличения. – Cutetare