当应用NSAffineTransform旋转并转换为NSRect时,转换不会影响任何子视图。我已经包含了下面的代码。
- (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);
}
答案 0 :(得分:3)
您没有将transform
应用于任何事情。你正在创造它然后扔掉它。无论如何,您永远不会在drawRect:
中添加子视图。 drawRect:
用于自定义绘制当前视图,而不是用于管理视图层次结构。您完成此操作的方式,每次重绘主视图时都会添加一个新的NSImageView
。
我建议回到Cocoa Drawing Guide了解Cocoa绘图是如何工作的。
查看您的代码,我认为您根本不需要drawRect:
。您只想在awakeFromNib
或initWithFrame:
中添加子视图。我假设你想要旋转视图。最简单的方法是给它一个支持层(setWantsLayer:
),然后在图层上设置affineTransform
。
或者,在drawRect:
中,您可以旋转上下文并只绘制图像(不使用NSImageView
)。有关如何进行自定义绘图的详细信息,请参阅“可可绘图指南”。