Технические вопросы и ответы QA1346

Нахождение текущего увеличения NSVIEW.

Q: Как я могу узнать, каков текущий масштаб координатного пространства NSVIEW, если он был изменен от значения по умолчанию?

A: Как я могу узнать, каков текущий масштаб координатного пространства NSVIEW, если он был изменен от значения по умолчанию?

NSView обеспечивает метод, -convertSize:fromView:, преобразовать размеры между координатными пространствами различных представлений в окне. При преобразовании известного размера от основного координатного пространства окна до того из NSView результатом является текущий уровень изменения масштаба.

Другой метод NSView, -scaleUnitSquareToSize:, устанавливает увеличение относительно существующей системы координат представления. При помощи категории Objective C для добавления нескольких методов к NSView мы можем обеспечить удобный API для масштабирования экземпляров NSView в свободных членах.

Перечисление 1  объявление категории ScaleUtilities

@interface NSView (ScaleUtilities) @property (assign) NSSize scale; - (void)resetScaling; @end

Перечисление 2  реализация категории ScaleUtilities

@implementation NSView (ScaleUtilities)

static const NSSize unitSize = {1.0, 1.0};

// Returns the scale of the receiver's coordinate system, relative to the window's base coordinate system.
- (NSSize)scale;
{
    return [self convertSize:unitSize toView:nil];
}

// Sets the scale in absolute terms.
- (void)setScale:(NSSize)newScale;
{
    [self resetScaling]; // First, match our scaling to the window's coordinate system
    [self scaleUnitSquareToSize:newScale]; // Then, set the scale.
    [self setNeedsDisplay:YES]; // Finally, mark the view as needing to be redrawn
}

// Makes the scaling of the receiver equal to the window's base coordinate system.
- (void)resetScaling;
{
    [self scaleUnitSquareToSize:[self convertSize:unitSize fromView:nil]];
}

@end


История версии документа


ДатаПримечания
24.07.2009

Обновленный код для использования свойств, агностических шириной скаляров и пробела. Перемещенный setNeedsDisplay: к «setScale»: и удаленное «scalePercent» свойство.

08.03.2005

Фиксированный опечатка в заголовках для списков.

13.12.2004

Была ошибка в реализации-resetScaling. Я делал-convertSize:toView: это должно было быть-convertSize:fromView:

14.10.2004

Новый документ, объясняющий, как обнаружить текущее увеличение (уровень изменения масштаба) любого NSView.