为了控制2 NSView,我创建了一个定制的NSImageViews子类。创建图像的代码如下:
- (id)initWithFrame:(NSRect)frameRect AndMap:(NSImage *)map AndPlayer:(NSImage *)guyImage
{
self = [super initWithFrame:frameRect];
if (self)
{
NSRect newRect = NSMakeRect(0.0, 0.0, 64.0, 64.0);
NSImageView *theMap = [[NSImageView alloc] initWithFrame:NSMakeRect(0.0, 0.0, frameRect.size.width, frameRect.size.height)];
[theMap setImage:map];
NSImageView *theGuy = [[NSImageView alloc] initWithFrame:newRect];
[theGuy setImage:guyImage];
[self setMapImage:theMap];
[self setPlayerView:theGuy];
[self addSubview:[self mapImage]];
[self addSubview:[self playerView]];然而,当我告诉视图用原点(128,0)在rect中绘制时,它用奇怪的偏移来绘制theMap,这样but的原点是128,0,而地图的原点是(128,20)。我找不到发生这种事的任何理由。
发布于 2011-05-29 03:03:36
我猜你有重叠的兄弟视图:
theMap有帧{{0.0, 0.0}, {frameRect.size.width, frameRect.size.height}}theGuy有帧{{0.0, 0.0}, {64.0, 64.0}}theMap和theGuy都是(或者似乎是)添加到相同的superview中,即self,并且具有相同的起源。可可不能保证对重叠的兄弟视图有正确的行为,即两个视图具有相同的直接superview,其相应的帧重叠。来自视图编程指南
注意:由于性能原因,Cocoa不强制执行兄弟视图之间的裁剪,或者在兄弟视图重叠时保证正确的失效和绘图行为。如果您希望在另一个视图前面绘制视图,则应将前面视图设置为后视视图的子视图(或后代视图)。
根据对堆栈溢出的另一个问题的回答的说法,另一种解决方案是打开视图的层。
发布于 2011-05-29 02:35:11
快速思考--奇怪的地图偏移不是地图NSImage的意外部分吗?
https://stackoverflow.com/questions/6165615
复制相似问题