Вопрос об измерении Objective-C / XCode - PullRequest
4 голосов
/ 22 августа 2011

Я создаю приложение (рабочий стол), которое является менеджером макета рекламы. Размеры из шаблона Indesign, с которым я работаю, указаны в дюймах. Например, журнал составляет 8х10,5 дюймов. Таким образом, чтобы дать пользователю представление о главной странице, я размещаю NSScrollView в главном окне и использую преобразование 72 (пикселей на дюйм), а затем отображаю линейки, например, так:

displayPageRect=NSMakeRect(400.0, 70.0,72*8.125,72*10.5);
displayPage = [[NSScrollView alloc] initWithFrame:displayPageRect];

//set up the rulers display
[displayPage setRulersVisible:YES];
[displayPage setHasVerticalRuler:YES];
[displayPage setHasHorizontalRuler:YES];

 //set up border color and width
 [displayPage setBorderType:NSLineBorder];

 //display the displayPage on the screen
 [[mainWin contentView] addSubview:displayPage];

это работает нормально, но линейки выходят в дюймах и совсем немного.

enter image description here

Кроме того, обратите внимание, что на изображении есть фиолетовый прямоугольник, который начинается от верхней части экрана и не в центре на виде. Это подпредставление NSScroll, и предполагается, что оно представляет поля страницы. Это тоже выключено.

    //make a new page element for page borders
PageElements* pageBorders = [PageElements new];
NSColor* borderColor = [NSColor purpleColor];
[pageBorders setColor:borderColor];
[pageBorders initWithFrame:NSMakeRect(72*.313, 72*.375, 72*7.499, 72*9.875)];
[[displayPage contentView] addSubview:pageBorders];

Очевидно, что я что-то не так делаю в своих конверсиях / местах размещения. Может кто-нибудь поправить меня в этом? Кроме того, есть ли в любом случае получить 0,0 линейки для выравнивания с координатами вида x = 0, y = 0?

1 Ответ

3 голосов
/ 23 августа 2011

Попробуйте поэкспериментировать с соответствующими свойствами соответствующего NSRulerView:

NSRulerView *hRuler = [displayPage horizontalRulerView];
[hRuler setMeasurementUnits:@"Points"]; // User whatever registered units you want here
[hRuler setOriginOffset:5.0]; // Experiment with this number to see way works for you

Обратите внимание, что единицы измерения, используемые при настройке единиц измерения, должны быть зарегистрированы.Есть несколько зарегистрированных по умолчанию или вы можете использовать свои собственные.См. Документацию по документации класса NSRulerView для получения дополнительной информации о различных способах настройки представлений линейки.

...