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

Why is my draw method not called in a subclassed MTKView?

我正在尝试绘制到 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");
}

None 个已记录的方法正在被调用。为什么?

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

您已经实现了 -draw: 方法。也就是说 不是 MTKView 的任何方法的覆盖。 MTKView 有一个不带参数的 -draw 方法。如果您打算覆盖该方法,则需要更改方法的签名。

也就是说,重写 -draw 以记录消息然后调用超类实现是合理的,但您不应该重写它来进行实际绘图。为此,应该重写 -drawRect: 方法。我不知道为什么你重写的那个方法没有被调用(尽管你确实弄错了参数类型)。