Изменение измерительных модулей линейки

Новое представление линейки автоматически использует предпочтительные измерительные модули пользователя для рисования знаков «диез» и меток, как сохраненный в пользовательской системе значений по умолчанию под ключом NSMeasurementUnit. Если Ваше приложение позволяет пользователю изменять свои предпочтительные измерительные модули, можно изменить их при использовании во время выполнения setMeasurementUnits:, который берет имя модулей для использования, такой как Inches или Centimeters, и заставляет представление линейки использовать то определение модуля в интервале его знаков «диез» и меток.

NSRulerView поддерживает модули Inches, Centimeters, Points, и Picas по умолчанию. Если Ваше приложение использует другие измерительные модули, Ваше приложение должно определить и зарегистрировать их прежде, чем создать любые представления линейки. Для регистрации модуля используйте метод класса registerUnitWithName:abbreviation:unitToPointsConversionsFactor:stepUpCycle:stepDownCycle:. Ваше приложение может зарегистрировать их везде, где это является самым удобным, такой как в методе делегата NSApplication applicationDidFinishLaunching:.

Этот фрагмент кода Objective C регистрирует новый вызванный модуль Grummets, с сокращением gt:

NSArray *upArray;
NSArray *downArray;
 
upArray = [NSArray arrayWithObjects:[NSNumber numberWithFloat:2.0], nil];
downArray = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.5],
    [NSNumber numberWithFloat:0.2], nil];
[NSRulerView registerUnitWithName:@"Grummets"
    abbreviation:NSLocalizedString(@"gt", @"Grummets abbreviation string")
    unitToPointsConversionFactor:100.0
    stepUpCycle:upArray stepDownCycle:downArray];

Этот фрагмент кода Java делает ту же вещь:

NSArray upArray;
NSArray downArray;
 
upArray = new NSArray (2.0, nil);
downArray = new NSArray (0.5, 0.2, nil);
[NSRulerView.registerUnit ("Grummets", "gt", 100.0, upArray, downArray]);

A Grummet 100,0 модуля PostScript (точки) в длине, таким образом, представление линейки с помощью нее рисует главный знак «диез» каждые 100,0 точки, когда его представление документа не масштабировано. Если представление документа масштабируется, представление линейки располагает свои знаки «диез» с интервалами соответственно.

Параметры stepUpCycle и stepDownCycle управляйте, как знаки «диез» нарисованы для частей и сети магазинов модулей. NSRulerView пытается поместить знаки «диез» так, чтобы они не были ни слишком переполнены, ни не слишком редки на основе текущего масштаба представления документа. Это делает так путем рисования меньших знаков «диез» для частей модулей где возможный и путем удаления знаков «диез» для целых модулей в случае необходимости.

Значение stepDownCycle решает, что дробные модули проверили представление линейки. Например, с модулем Grummets определенный выше, цикл шага вниз 0.5, тогда 0.2. С этим циклом представление линейки сначала проверяет, чтобы видеть, существует ли комната для меток каждая половина Grummet, размещение их, если существует. Затем это проверяет каждую пятую часть остающегося пространства или одну десятую полного Grummet, размещение дальнейших знаков «диез», если существует комната. Тогда это возвращается к первому шагу в цикле для дальнейшего подразделения линейки и т.д.

Значение stepUpCycle определяет, сколько полных меток модуля отбрасывается, когда нет комнаты для каждого. Пример использует одноступенчатый цикл 2,0, что означает это каждую секунду Grummet знак «диез» выведен на экран, если нет комнаты для всех, то каждая четверть, если все еще нет комнаты и т.д.