Каждый NSView имеет границы и рамки, рамка - это прямоугольник, который описывает расположение представления в границах его суперпредставления.У большинства представлений есть границы с нулевым началом и размером, соответствующим размеру их кадра, но это не обязательно так.Вы можете изменить соотношение границ и рамки вида для масштабирования и перевода как пользовательского чертежа, так и подпредставлений.Когда вы изменяете границы вида, это также рекурсивно влияет на отрисовку дочерних видов.
Самый простой способ изменить границы вида - с помощью [NSView scaleUnitSquareToSize:].В одном из ваших представлений попробуйте вызвать [self scaleUnitSquareToSize: NSMakeSize (2.0, 2.0)], и вы увидите, что размер всего, что внутри него, кажется двойным.Создайте файл XIB с окном, содержащим пользовательский вид, и кнопкой.Установите пользовательский класс пользовательского представления в MyView.Подключите действие кнопки к представлению doubleSize: action.Постройте и запустите и нажмите кнопку.Красный квадрат в пользовательском представлении должен увеличиваться в размере при каждом нажатии.
/// MyView.h
@interface MyView : NSView {
}
- (IBAction)doubleSize:(id)sender;
@end
/// MyView.m
@implementation MyView
- (IBAction)doubleSize:(id)sender {
[self scaleUnitSquareToSize:NSMakeSize(2.0, 2.0)];
/// Important, changing the scale doesn't invalidate the display
[self setNeedsDisplay:YES];
}
- (void)drawRect:(NSRect)dirtyRect {
NSSize squareSize = NSMakeSize(8, 8);
NSRect square = NSMakeRect([self bounds].size.width / 2 - squareSize.width / 2,
[self bounds].size.height / 2 - squareSize.height / 2,
squareSize.width,
squareSize.height);
[[NSColor redColor] set];
NSRectFill(square);
}
@end