我正在自定義我的drawRect:
方法,如果它已被「加載」(由於我從WebView
中抓取它,因此需要花費幾秒鐘的時間加載),因此可用於繪製NSImage
,並推遲繪製圖像直到稍後如果圖像尚未加載。從-drawRect中調用-setNeedsDisplay:YES?
- (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];
如果圖像不可用,希望它會告訴可可在下一次再次調用drawRect
(並且一次又一次,直到圖像被繪製),但是這是行不通的。
任何指針,我可以從哪裏去?
編輯:
我非常清楚的委託方法WebView
火的時候的loadRequest已處理完畢。然而,由於其他應用程序的結構,使用這些應用程序將非常困難,但考慮到當前的答案,我想我會嘗試以某種方式使用它們。 (也注意到,我的drawRect:方法是重量比較輕,也被什麼除了我已經有上面的代碼。)
我現在有每個自定義數據問同樣的WebView生成圖像約10+自定義視圖爲他們每個人。同時,我從NSCache中抓取圖像(使用與每個自定義視圖對應的標識符),如果它不存在或需要更新,則創建該圖像,如果尚不可用,則返回nil。因此,從- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
或其他方法調用[view setNeedsDisplay:YES]並不容易。
到底是如何,你抓住那個圖像? – DrummerB
-drawRect:不應該有副作用。它只應根據視圖的當前狀態進行繪製,並應儘可能高效地進行。在-drawRect:內發送-setNeedsDisplay:消息將導致您每次通過主事件循環時重新繪製視圖。 – NSResponder