Cocoa:awakeFromNib实例化一个NSView子类drawRect无法正常工作

时间:2011-03-02 02:28:59

标签: cocoa nsview

我在这里做错了吗?

如果我从awakeFromNib方法调用我的类,我可以通过NSLog跟踪该类被调用到initWithFrame方法,但是没有调用drawRect方法。如果我通过IBAction实例化(比如一个按钮)它可以正常工作。这是代码:

-(void) awakeFromNib { 

[winMain center];

SplashScreen* newSplashScreen = [[SplashScreen alloc] initWithFrame:NSMakeRect(0.0, 0.0, 737.0, 303.0)];

[[[NSApp mainWindow] contentView] addSubview:newSplashScreen];
}

和我的SplashScreen.m文件:

#import "SplashScreen.h"

@implementation SplashScreen

- (id)initWithFrame:(NSRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code here.
    }
    return self;
}

- (void)drawRect:(NSRect)rect {

    NSImage *imageFromBundle = [NSImage imageNamed:@"sheet1.png"];
    [self setNeedsDisplay:YES];
    [imageFromBundle drawInRect:[self bounds] fromRect:NSMakeRect(0.0, 0.0, 737.0, 303.0) operation: NSCompositeCopy fraction:1.0];
}

@end

1 个答案:

答案 0 :(得分:0)

为什么在将视图绘制到视图之前将视图标记为需要重绘?这将加载图像,标记视图需要重绘,加载图像,标记视图等等.... 删除setNeedsDisplay: 并阅读有关视图和内存管理的内容。