2011-05-29 55 views
0

我創建了NSView的自定義子類以控制2個NSImageViews。創建圖像的代碼如下:NSImageView繪圖不正確

- (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's origin is at 128,0,but the map's origin is at something like(128,20)。我找不到爲什麼會發生這種情況。

回答

2

我的猜測是,你有重疊的兄弟姐妹的觀點:

  • theMap有框架{{0.0, 0.0}, {frameRect.size.width, frameRect.size.height}}
  • theGuy具有框架{{0.0, 0.0}, {64.0, 64.0}}
  • theMaptheGuy是(或者看起來是)添加到相同的上海華,即self,並且具有相同的來源。

可可並不保證重疊同胞視圖的正確行爲,即兩個視圖具有相同的直接超視圖並且其相應的框架重疊。從View Programming Guide

注:由於性能原因,可可並不強制裁剪同級視圖之間或保證正確的失效和圖紙的行爲,當兄弟的意見重疊。如果您希望在另一個視圖前面繪製視圖,則應該使前視圖成爲後視圖的子視圖(或後代)。

根據this answer to another question on Stack Overflow,一種替代解決方案是打開圖層的視圖。

0

快速思考 - 是奇怪的地圖偏移不意外地圖的一部分NSImage