2015-05-10 17 views
5

Ho provato rendering di un fuori campo WKWebView in un'immagine usandoRender fuori campo WKWebView in NSImage

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

senza successo. L'immagine risultante è sempre vuota (bianca o trasparente). Qualcuno è riuscito a farlo su Yosemite?

+0

Dai un'occhiata a questo (in fondo alla pagina): http://atmarkplant.com/wkwebview-screenshots/ – Moritz

+0

Cocoa not UIKit –

+0

@ErikAigner Hai trovato una soluzione per questo? – Dalmazio

risposta

1

È possibile farlo utilizzando drawViewHierarchyInRect: nessuno degli altri metodi sembra funzionare, utilizzare in questo modo:

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

che sto facendo lo stesso in iOS, ma purtroppo questo metodo è lento, deve anche essere eseguito nel thread principale e funziona solo se afterScreenUpdates è impostato su yes. Vedere questa risposta: How can I take a snapshot of a UIView that isn't rendered?

Inoltre, non c'è modo di dire, da quello che posso vedere, se qualsiasi aspetto della pagina web ha bisogno di essere ridisegnato.

+0

Non sapevo che 'UIKit' fosse disponibile su macOS? ;) –

+0

Ah ha, sì, ben individuato. Condivido molto codice tra iOS e MacOS, ma ho chiaramente dimenticato le differenze tra UIView e NSView. Penso di averlo esaminato ad un certo punto e la risposta sembrava essere nell'uso di chromium per fare cose fuori schermo, ma il codice del browser di terze parti è severamente vietato in iOS. Forse vale la pena esaminarlo. –