为什么我的绘制方法没有在子类MTKView中调用?

时间:2017-12-24 13:38:06

标签: objective-c macos metal

我试图绘制从MTKView子类化的视图,但是没有调用绘图方法。

@interface GameViewController : MTKView
@end

@implementation GameViewController
{
   ...
}

- (BOOL)acceptsFirstResponder
{
    return YES;
}

- (void)drawRect:(CGRect)rect
{
    NSLog(@"drawRect\n");
}

- (void)draw:(CGRect)rect
{
    NSLog(@"draw\n");
}

未调用任何已记录的方法。为什么呢?

根据documentation,我应该使用委托或子类MTKView。我选择了子类,因为我的理解是我可以使用键盘输入,这就是我想要的。

1 个答案:

答案 0 :(得分:0)

您已实施-draw:方法。这是覆盖MTKView的任何方法。 MTKView-draw方法,不带参数。如果您打算覆盖该方法,则需要更改方法的签名。

也就是说,覆盖-draw来记录消息然后调用超类实现是合理的,但是你不应该覆盖它来进行实际的绘制。为此目的,应该覆盖-drawRect:方法。我不知道为什么你没有调用那个方法的覆盖(虽然你确实得到了错误的参数类型)。