0

我创建了一个自定义的 NSView 子类来控制 2 个 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) 的矩形中绘制时,它会以奇怪的偏移量绘制theMap,因此theGuy的原点位于 128,0,但theMap的原点类似于 ( 128,20)。我找不到发生这种情况的任何原因。

4

2 回答 2

2

我的猜测是你有重叠的兄弟视图:

  • theMap有框架{{0.0, 0.0}, {frameRect.size.width, frameRect.size.height}}
  • theGuy有框架{{0.0, 0.0}, {64.0, 64.0}}
  • 两者theMaptheGuy都(或似乎)添加到同一个超级视图中,即self和 具有相同的起源。

Cocoa 不保证重叠同级视图的正确行为,即具有相同直接父视图且对应帧重叠的两个视图。从查看编程指南

注意:出于性能原因,Cocoa 不强制在同级视图之间进行裁剪,也不保证在同级视图重叠时正确的失效和绘制行为。如果你想在另一个视图前面绘制一个视图,你应该使前视图成为后视图的子视图(或后代)。

根据对 Stack Overflow 上另一个问题的回答,另一种解决方案是为视图打开图层。

于 2011-05-29T03:03:36.930 回答
0

快速思考 - 奇怪的地图偏移不是意外地成为地图的一部分NSImage吗?

于 2011-05-29T02:35:11.133 回答