Domanda

Sono in grado di creare un UIImage da uno strato Core Animation utilizzando il seguente codice:

- (UIImage*)contentsImage;
{
   UIGraphicsBeginImageContext([self bounds].size);
   [self renderInContext:UIGraphicsGetCurrentContext()];
   UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();

   return image;
}

Questo codice è nel mio CALayer classe derivata. L'edizione che sto funzionando in è che ho due CAShapeLayers che sono strati figlio del mio strato che non vengono rese per l'immagine risultante. Se aggiungo CALayers standard, come i bambini ottengono resi bene. La documentazione di Apple dicono:

  

rende il ricevitore ei suoi sottolivelli   nel contesto specificato.

Si dice anche che è stato disponibile dal iPhone OS 2.0. Chiedendosi se c'è qualcosa che mi manca o se devo presentare un radar.

Tutte le idee che cosa potrebbe mantenere i CAShapeLayers bambino da ottenere disegnato all'immagine?

Grazie.

È stato utile?

Soluzione

I macchinari CALayer chiama renderInContext per creare la sua proprietà contenuti bitmap. Ma in un CAShapeLayer, la proprietà percorso non è in realtà reso ai suoi contenuti, come visto da questa nota nell'intestazione:

  

La forma nel suo complesso viene composta   tra contenuto del livello e della sua   primo sottolivello.

E 'ovvio che renderInContext non sarà effettivamente rendere il percorso CAShapeLayer sul vostro contesto. Non ho effettivamente provato questo per me stesso comunque.

Altri suggerimenti

Non so se il suo relativo al sistema, ma c'è una nota nella documentazione CALayer per renderInContext che dice:

**Important**: The Mac OS X v10.5 implementation of this method does not
support the entire Core Animation composition model. QCCompositionLayer, 
CAOpenGLLayer, and QTMovieLayer layers are not rendered. Additionally,
layers that use 3D transforms are not rendered, nor are layers that specify 
backgroundFilters, filters, compositingFilter, or a mask values. 
Future versions of Mac OS X may add support for rendering these layers
and properties.

In ogni modo, mi sono imbattuto in un problema simile quando si utilizza la funzione di UIView drawRect in combinazione con il disegno in un contesto di immagini. L'UIView complessiva che conteneva subviews non richiama i suoi subviews se ho chiamato drawRect (che ha senso ora effettivamente in quanto si dice nella documentazione se si chiama drawRect siete responsabili per il riempimento che tutta l'area a prescindere di super e visualizzazione secondaria implementazioni). Ho risolto il mio problema ha appena chiamato drawRect su tutti i miei subviews, passando loro le loro proprie strutture.

Quindi, vorrei suggerire forse il passaggio da renderInContext e utilizzare drawInContext di CALayer invece? Avrai bisogno di eseguire l'override del metodo in quanto non fa nulla per impostazione predefinita. I vostri sottoclassi dovranno anche spostare i contesti per loro cornici adeguate. Anche per essere sicuri che si potrebbe desiderare di controllare che nessuno di codice si aggiunge colpisce il normale rendering di questi strati.

Ho presentato un radar su questo. Non riesco a vedere alcuna ragione nella documentazione che non dovrebbe work.I risponderà di nuovo qui se / quando Apple risponde al radar.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top