我正在自定义我的drawRect:
方法,该方法用于绘制 aNSImage
如果它已“加载”(加载需要几秒钟的时间,因为我是从 a 抓取它WebView
),如果图像没有,则推迟绘制图像直到稍后尚未加载。
- (void)drawRect:(NSRect)dirtyRect
{
NSImage *imageToDraw = [self cachedImage];
if (imageToDraw != nil) {
[imageToDraw drawInRect:dirtyRect fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0 respectFlipped:YES hints:nil];
} else {
//I need help here
[self setNeedsDisplay:YES];
}
}
我的问题是如何做后者。[self cachedImage]
如果图像不可用,则返回nil
,但在接下来的几秒钟内它可能随时可用,那时我想绘制它,因为自定义视图已经在屏幕上。
我最初的直觉是在图像不可用时尝试调用[self setNeedsDisplay:YES];
,希望它会告诉 CocoadrawRect
下次再次调用(一次又一次,直到图像被绘制),但这不起作用。
关于我可以从这里去哪里的任何指示?
编辑:
WebView
当 loadRequest 已完全处理时,我非常了解该火灾的委托方法。然而,由于应用程序其余部分的结构,使用这些将非常困难,但我想我现在会尝试以某种方式使用它们,因为目前的答案。(另请注意,我的 drawRect: 方法相对较轻,除了我上面已经拥有的代码之外什么都没有。)
我目前有大约 10 多个自定义视图,每个视图都有自定义数据,要求相同的 WebView 为每个视图生成图像。同时,我从 NSCache 中获取图像(使用与每个自定义视图对应的标识符)并在它不存在或需要更新时创建它,如果它还不可用则返回 nil。- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
因此,它不像从或其他方法调用 [view setNeedsDisplay:YES] 那样容易。