Voglio sapere c'è qualche metodo per rendere una vista all'immagine? proprio come uno screenshot, ma posso specificare qualsiasi vista su quel metodo. So come farlo in iOS. Saving view content, ma come posso farlo in mac os?cacao: come rendere la vista all'immagine?
risposta
Ci sono diversi modi, ma non funziona perfettamente. Molti problemi sono connessi con le viste Layer Backed.
se non si dispone di supporto layer o viste di hosting è possibile utilizzare questo codice:
NSData* data = [mainView dataWithPDFInsideRect:[mainView bounds]];
NSImage *img = [[NSImage alloc] initWithData:data];
se si lavora con una vista a base di strato:
fino 10.8 il modo migliore per me era
ma in 10.8 bitmapImageRepForCachingDisplayInRect
ha smesso di funzionare con viste Layer Backed.
c'è la possibilità di fare uno screenshot dello schermo e tagliare fuori la vostra vista:
+ (NSImage*) screenCacheImageForView:(NSView*)aView
{
NSRect originRect = [aView convertRect:[aView bounds] toView:[[aView window] contentView]];
NSRect rect = originRect;
rect.origin.y = 0;
rect.origin.x += [aView window].frame.origin.x;
rect.origin.y += [[aView window] screen].frame.size.height - [aView window].frame.origin.y - [aView window].frame.size.height;
rect.origin.y += [aView window].frame.size.height - originRect.origin.y - originRect.size.height;
CGImageRef cgimg = CGWindowListCreateImage(rect,
kCGWindowListOptionIncludingWindow,
(CGWindowID)[[aView window] windowNumber],
kCGWindowImageDefault);
return [[NSImage alloc] initWithCGImage:cgimg size:[aView bounds].size];
}
Sto usando questo codice nel mio app, che funziona alla grande.
Tuttavia, se trascino l'app su un monitor secondario, l'acquisizione dello schermo viene espulsa e viene rilevato il rect errato.
Il codice seguente consente di risolvere tale questione (ho anche rimosso alcune matematica ridondanti dal calcolo, dove un campo è stato che viene sottratto e poi aggiunto) nel caso in cui qualcuno viene attraverso questo in futuro:
NSRect originRect = [aView convertRect:[aView bounds] toView:[[aView window] contentView]];
NSArray *screens = [NSScreen screens];
NSScreen *primaryScreen = [screens objectAtIndex:0];
NSRect rect = originRect;
rect.origin.y = 0;
rect.origin.x += [aView window].frame.origin.x;
rect.origin.y = primaryScreen.frame.size.height - [aView window].frame.origin.y - originRect.origin.y - originRect.size.height;
- 1. cacao: Come rendere trasparente lo sfondo webView?
- 2. Come rendere trasparente qualsiasi vista?
- 3. Come impostare la stampa nel cacao, veloce?
- 4. Come rendere la vista ZF2 all'interno della risposta JSON?
- 5. come rendere la vista rettangolo in showcaseview per listview
- 6. come rendere scorrevole una vista Android quando appare la tastiera?
- 7. Come rendere visibile la vista sulla scena dock di Storyboard?
- 8. Come rendere vista ridimensionabile sul touch evento
- 9. Come posso archiviare la mia struttura di cacao
- 10. cacao Visualizzazioni dall'utente ridimensionabili
- 11. Scrivi codice cacao sicuro
- 12. Catena di risposta per storyboard di cacao
- 13. Imposta la posizione vista in alto a destra in modo programmatico nel tocco di cacao
- 14. Implementare vista come la vista cercapersone
- 15. come rendere una variabile vista in tutte le viste - rotaie
- 16. node.js Addon utilizzando la struttura del cacao
- 17. Come rendere qualsiasi vista per disegnare su tela?
- 18. Disabilita la finestra allungando il cacao?
- 19. controllare la connessione Internet nell'applicazione di cacao
- 20. cacao setAnimationDidStopSelector
- 21. Come rendere un partial in vista sinatra (haml in haml)?
- 22. Come rendere Rails rendere una vista e scorrere automaticamente verso il basso?
- 23. Come rendere view.getDrawingCache() preservando la trasparenza
- 24. Come scoprire la versione dei baccelli di cacao installati?
- 25. iOS come rendere opaca la visualizzazione secondaria di una vista trasparente?
- 26. Come rendere la diapositiva SWRevealViewController "sopra" al controller della vista principale e non "spingerla" fuori?
- 27. Come rendere una vista piazza ridimensionare con la sua superview utilizzando layout automatico
- 28. Come rendere la vista di modifica e il messaggio flash in binari3
- 29. Come rendere una vista DatePicker mostra solo la data e non l'ora
- 30. Anomalia posizione finestra cacao
+1 risposta completa – Vervious
grazie mille !!! – NOrder
La tua versione con bitmapImageRepForCachingDisplayInRect funziona correttamente per me alla 10.7 per una vista con layer supportato e ho aggiunto lo screenCacheImageForView per 10.8 - aggiornato da alcuni giorni a 10.8.3, ma screenCacheImageForView causa problemi con la mia vista (che ha 2 etichette aggiuntive NSTextField in alto e erroneamente inclusa nella schermata della vista). Ma: su 10.8.3 il bitmapImageRepForCachingDisplayInRect funziona bene - non lo era prima del 10.8.3? – konran