2012-10-22 55 views
0

我很难理解为什么下面的代码不起作用,我想要实现的是在NSView的左上角显示的图像,但没有任何显示...cocoa - 在NSView中绘制图像

NSImage *map0 = [NSImage imageNamed:@"map0.png"]; 
NSRect rect = NSMakeRect(0, 0, 400, 400); 
[map0 drawInRect:rect fromRect:NSZeroRect operation:NSCompositeSourceAtop fraction:1.0f]; 
[map drawRect:rect]; 

编辑:

map是一个NSView我想成将图像绘制成

+2

你能解释一下最后一行吗?这个上下文中的map变量是什么,为什么它需要绘制与你的图像相同的矩形? – Tim

+0

对不起,我忘了说,地图是NSView ... –

回答

2

永远不要直接调用drawRect:。这个例程有许多由Cocoa提供的前提条件,例如创建CGContextRef。您执行drawRect:。可可调用它。

您的drawInRect:fromRect:operation:fraction:呼叫应该被放入的map,这应该是NSView的子类。使用NSImageView而非自定义NSView通常可以更好地解决此特定问题,但如果绘图更复杂,则自定义NSView是合适的。

+0

对于以下情况,你会推荐什么:我想实现的是一张地图,而我有6张图像共同创建了一幅世界地图应该以某种方式可拖动和可缩放,所以想象它有点像谷歌地图... NSView或NSImageView? –

+0

要做出比屏幕大得多的拖动和缩放以及良好的性能,您经常需要CATiledLayer。但是,如果这是您的第一个应用程序,您可能希望从简单的事情开始,并在滚动视图中放置6个图像浏览。对于只有屏幕尺寸6倍的东西,它可能足够快。 –

+0

你是怎么猜测这是我的第一个应用程序? :无论如何,滚动视图的想法是好的,它听起来更简单,然后我会尝试去CATiledLayer。谢谢你的帮助 :) –