将NSImage绘制到NSView子类中

时间:2010-02-04 21:58:09

标签: objective-c cocoa drawing nsview

到目前为止,这是我的代码(在绘制矩形中):

// Drawing code here.
NSLog(@"%@", [[NSBundle mainBundle] pathForResource:@"NoiseBGMainView" ofType:@"jpg"]);
NSURL *pathToBGImage = [[NSURL alloc] initWithString:[[NSBundle mainBundle] pathForResource:@"NoiseBGMainView" ofType:@"jpg"]];
NSImage *NoiseBGMainView = [[NSImage alloc] initWithContentsOfURL:pathToBGImage];
[NoiseBGMainView drawInRect:[self bounds] fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1];

图像没有画出......我不知道出了什么问题。

3 个答案:

答案 0 :(得分:4)

为什么不直接使用[NSImage imageNamed:@"NoiseBGMainView.jpg"]?这将为您提供NSImage的图片(如果可以找到),如果不能,则为nilNSLog该调用的结果是什么,然后报告是否正在记录(null)

答案 1 :(得分:1)

通过将NSImageView附加到视图并将图像资源设置为NSImageView的图像,可以在不编写任何绘图代码的情况下将NSImage绘制到NSView中。 (NSImageView处理所有绘图)。

如果从笔尖加载自定义NSView,则不需要任何设置代码 - 只需与Interface Builder建立适当的NSView-NSImageView-NSImage(资源)连接。

答案 2 :(得分:1)

NSURL *pathToBGImage = [[NSURL alloc] initWithString:[[NSBundle mainBundle] pathForResource:@"NoiseBGMainView" ofType:@"jpg"]];

这是错误的。 -[NSURL initWithString:]采用网址的字符串版本,例如http://apple.com/,而不是路径名。

由于您未传递URL,因此该URL将是相对URL,但相对URL需要基础。 URL是有效的对象,但不会在任何地方引导。反过来,这会导致initWithContentsOfURL:返回nil(因为您尝试从没有基础的相对网址加载图片)。然后你尝试告诉图像绘制,但你没有图像,所以没有任何反应。

你想要initFileURLWithPath:。 (或者类方法fileURLWithPath:,稍后您不必使用它来释放URL。)