2015-05-10 4 views
5

Ich habe versucht, einen virtuellen WKWebView in ein Bild zu machenOffscreen WKWebView in NSImage Render

  • func cacheDisplayInRect(rect: NSRect, toBitmapImageRep bitmapImageRep: NSBitmapImageRep)
  • und func drawLayer(layer: CALayer, inContext ctx: CGContext)

ohne Erfolg verwenden. Das resultierende Bild ist immer leer (weiß oder transparent). Hat es jemand auf Yosemite geschafft?

+0

Werfen Sie einen Blick auf diese (unten auf der Seite): http://atmarkplant.com/wkwebview-screenshots/ – Moritz

+0

Cocoa nicht UIKit –

+0

@ErikAigner Haben Sie eine Lösung dafür gefunden? – Dalmazio

Antwort

1

Sie können es mit drawViewHierarchyInRect: keine der anderen Methoden zu funktionieren scheint, benutzen Sie es wie so:

UIGraphicsBeginImageContextWithOptions(newRect.size, YES, 0); 
BOOL ok = [view drawViewHierarchyInRect:newRect afterScreenUpdates:YES]; 
if (!ok) { 
    NSLog(@"Problem with drawView..."); 
} 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

ich in iOS das gleiche mache, aber leider ist diese Methode langsam, muss auch im Hauptthread ausgeführt werden und funktioniert nur, wenn afterScreenUpdates auf yes gesetzt ist. Siehe diese Antwort: How can I take a snapshot of a UIView that isn't rendered?

Auch gibt es keine Möglichkeit zu sagen, von was ich sehen kann, wenn irgendein Aspekt der Webseite neu gezeichnet werden muss.

+0

Ich wusste nicht, 'UIKit' war auf macOS verfügbar? ;) –

+0

Ah ha, ja, gut entdeckt. Ich teile viel Code zwischen iOS und MacOS, habe aber die Unterschiede in UIView und NSView vergessen. Ich denke, dass ich irgendwann nachgesehen habe und die Antwort schien darin zu liegen, Chrom zu verwenden, um Offscreen-Sachen zu machen, aber der Browsercode von Drittanbietern ist in iOS strikt verboten. Vielleicht lohnt es sich, das zu untersuchen. –