如何在 Cocoa AppKit 应用程序中实现缩放/缩放(即不最大化窗口,而是缩放窗口及其所有子视图)?我认为它在 iOS 中称为“zoomScale”。可以使用 Core Animations 或 Quartz 2D 来完成吗(例如CGContextScaleCTM
)还是我被迫在所有 NSView、NSCell 等中手动实现它?
每个 NSView 都有一个边界和框架,框架是描述视图在其父视图边界内的位置的矩形。大多数视图的边界为零原点,并且大小与其帧大小相匹配,但情况并非必须如此。您可以更改视图边界和框架的关系,以缩放和平移自定义绘图和子视图。当您更改视图的边界时,它也会递归地影响后代视图的绘制。
更改视图边界的最直接方法是使用 -[NSView scaleUnitSquareToSize:]。在您的其中一个视图中,尝试调用 [self scaleUnitSquareToSize:NSMakeSize(2.0, 2.0)],您应该看到其中所有内容的大小似乎都是双倍的。
这是一个例子。创建一个带有包含自定义视图和按钮的窗口的 XIB 文件。将自定义视图的自定义类设置为 MyView。将按钮的操作连接到视图的 doubleSize: 操作。构建并运行并点击按钮。每按一次,自定义视图中的红色方块的大小就会加倍。
/// 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)