我有一個自定義的NSView,它曾經在NIB中創建並作爲NSMenuItem的視圖分配,這非常棒,但現在我想在代碼中創建視圖我可以向你保證的好理由)哪個看起來不難,但是這個看法實際上並沒有繪製。可可 - NSMenuItem中的自定義NSView不會繪製
即使在發送「setNeedsDisplay:」消息時,以前被調用以在需要時繪製視圖的「drawRect:」消息不再被調用。
我用圖像初始化視圖,並設置大小(與圖像大小相匹配的視圖),因爲菜單項大小正確,但沒有圖像,所以似乎可行。
這裏可能會發生什麼?
這是給init視圖代碼:
-(id)initWithImage:(NSImage*)image
{
self = [super init];
if (self != nil)
{
self.imageToDisplay = image;
// this bit does get called and resizes the view to match the image size
NSRect imageBounds = NSMakeRect(0.0f, 0.0f, imageToDisplay.size.width, imageToDisplay.size.height);
[self setBounds:imageBounds];
[self setFrame:imageBounds];
[self setHidden:NO];
[self setAlphaValue:1.0f];
[self setAutoresizesSubviews:YES];
}
return self;
}
這是繪製不被調用
// this is never called
-(void)drawRect:(NSRect)dirtyRect
{
if (imageToDisplay == nil)
return;
NSRect imageBounds = NSMakeRect(0.0f, 0.0f, imageToDisplay.size.width, imageToDisplay.size.height);
[self setBounds:imageBounds];
[self setFrame:imageBounds];
[imageToDisplay drawInRect:[self bounds]
fromRect:imageBounds
operation:NSCompositeSourceAtop
fraction:1.0f];
}
視圖代碼這是菜單項的代碼它增加了視圖。
-(void)awakeFromNib
{
MyCustomView* view = [[MyCustomView alloc] init];
[self setView:view];
// i would have expected the image to get drawn at this point
[view setNeedsDisplay:YES];
}
現貨!非常感謝:) – Nippysaurus 2011-03-13 09:54:36
很高興我能幫忙。 – 2011-03-13 22:32:11