【问题标题】:Cocoa NSView not filling with color可可 NSView 没有填充颜色
【发布时间】:2011-07-05 06:04:45
【问题描述】:

我做错了什么?

我有一个 awakeFromNib 方法,在该方法中我调用了一个子视图 (GameMap) 类。该类存在,我能够登录 awakeFromNib 方法以及登录 GameMap 的 initWithFrame 方法,但我无法让 GameMap 在窗口中绘制。这是我的 AppController.m 文件的 awakeFromNib 方法:

-(void) awakeFromNib {

    //make new game map
    GameMap* newMap = [[GameMap alloc] initWithFrame:NSMakeRect(0.0, 0.0, 1000.0, 500.0)];

    [[[NSApp mainWindow] contentView]addSubview:newMap];

    [newMap release];
}

在 GameMap.m 中,这里是 drawRect 方法

- (void)drawRect:(NSRect)rect {

    [[NSColor whiteColor] set];
    NSRectFillUsingOperation(rect, NSCompositeSourceOver);

}

在同一个应用程序中,我从 AppController 调用另外两个类,NSView、MakeCircle 和 MakeRoom 的所有子视图,它们在窗口中放置一个圆圈(duh,:D)或一个带有笔划的矩形,它们工作正常,但是他们正在运行 IBOutlet 操作(按钮单击)。任何帮助,将不胜感激。

*注意:我有 NSRectFillUsingOperation(rect, NSCompositeSourceOver) 但这也失败了 NSRectFill(rect)。

**我还可以从initWithFrame将传递的rect的origin.x/size.width等记录到GameMap,所以我知道它在那里。

(我离开电脑几个小时了,所以不要认为我不回复是无礼的,只是想在我离开之前把这个问题问出来。)

【问题讨论】:

  • 您是否在调用-awakeFromNib 时检查了[NSApp mainWindow] 是否非nil

标签: cocoa nsview


【解决方案1】:

只需使用 NSRectFill(rect);而不是 NSRectFillUsingOperation(rect, NSCompositeSourceOver);

【讨论】:

  • 我在发布之前尝试过 NSRectFill(rect)。它也失败了。
【解决方案2】:

您是否在 Interface Builder 中将视图的类设置为 GameMap 类而不是 NSView)?执行此操作时,应自动调用 GameMap 的 drawRect()。

【讨论】:

    猜你喜欢
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2020-05-04
    相关资源
    最近更新 更多