gpt4 book ai didi

objective-c - NSRect 的 subview 不受 NSAffineTransform 影响

转载 作者:行者123 更新时间:2023-12-03 16:58:03 25 4
gpt4 key购买 nike

当应用 NSAffineTransform 旋转和平移到 NSRect 时,所有 subview 都不会受到变换的影响。我已经包含了下面的代码。

- (void)drawRect:(NSRect)dirtyRect
{

NSAffineTransform * transform = [NSAffineTransform transform];
[transform translateXBy:13.0 yBy:3.0];
[transform rotateByDegrees:-45];
[transform translateXBy:-13.0 yBy:3.0];
[transform concat];


NSImageView *imageViewWatchPointer;
NSRect watchPointer = NSMakeRect(0, 0, 134, 49);
imageViewWatchPointer = [[NSImageView alloc] initWithFrame:watchPointer];
[imageViewWatchPointer setImageScaling:NSScaleNone];
[imageViewWatchPointer setImage:[NSImage imageNamed:@"mastery_watch_pointer"]];
[self addSubview:imageViewWatchPointer];

[[NSColor blueColor] set];
NSRectFill(watchPointer);

}

最佳答案

您没有对任何内容应用transform。你正在创造它,然后扔掉它。无论如何,您永远不会在drawRect:中添加 subview 。 drawRect:用于自定义绘制当前 View ,而不是用于管理 View 层次结构。通过这种方式,每次重绘主视图时都会添加一个新的 NSImageView

我建议返回Cocoa Drawing Guide了解 Cocoa 绘图的工作原理。

看看你的代码,我认为你根本不需要 drawRect: 。您只想添加一个 subview ,可能在 awakeFromNibinitWithFrame: 中。我假设您希望旋转 View 。最简单的方法是为其提供一个支持层 (setWantsLayer:),然后在该层上设置 affineTransform

或者,在drawRect:中,您可以旋转上下文并仅绘制图像本身(不使用NSImageView)。有关如何进行自定义绘图的详细信息,请参阅 Cocoa 绘图指南。

关于objective-c - NSRect 的 subview 不受 NSAffineTransform 影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14757015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com