0

到目前为止,这是我的代码(在draw rect中):

// 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];

并且图像没有绘制......我不知道出了什么问题。

4

3 回答 3

4

为什么不直接使用[NSImage imageNamed:@"NoiseBGMainView.jpg"]呢?这会给你一张NSImage你的照片(如果它可以找到它),nil如果它不能。 NSLog该调用的结果是什么,然后回来报告它是否正在记录(null)

于 2010-02-04T22:01:16.550 回答
1

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

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

于 2010-02-05T05:29:56.030 回答
1
NSURL *pathToBGImage = [[NSURL alloc] initWithString:[[NSBundle mainBundle] pathForResource:@"NoiseBGMainView" ofType:@"jpg"]];

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

因为您没有传递 URL,所以 URL 将是相对 URL,但相对 URL 需要一个基础。URL 是一个有效的对象,但不会指向任何地方。反过来,这会导致initWithContentsOfURL:返回nil(因为您尝试从没有基础的相对 URL 加载图像)。然后,您尝试告诉图像进行绘制,但您没有图像,因此没有任何反应。

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

于 2010-02-06T02:19:27.733 回答