Negli documentation stati di Apple che è necessario prendere in considerazione il fattore di scala di un livello quando:Quando è necessario impostare la proprietà contentsScale di un CALayer?
- crea ulteriori strati Core Animation con diversi fattori di scala e li compositi nel proprio contenuto
- Imposta il contenuti di proprietà di uno strato core Animation direttamente
L'ultima affermazione non è del tutto chiaro per me. Dicono anche:
Le applicazioni che utilizzano strati Core Animation direttamente per fornire contenuti può essere necessario regolare il loro codice di disegno per tenere conto di scala fattori. Normalmente, quando disegni drawRect: method, o nel drawLayer: inContext: metodo del delegato del layer, il sistema aggiusta automaticamente il contesto grafico all'account per i fattori di scala .
Normalmente o sempre? e questo è valido solo per il livello di supporto ospitato dalla vista o per ogni livello che aggiungo come sottolivello al livello di supporto? perché dicono anche:
Se l'applicazione crea strati senza una visualizzazione associata, fattore di scala ogni nuovo oggetto strato è impostato su 1,0 inizialmente. Se non si modifica il fattore di scala e se successivamente si disegna il livello su uno schermo ad alta risoluzione , il contenuto del livello viene ridimensionato automaticamente per compensare la differenza di fattori di scala. Se non vuoi che il contenuto sia ridimensionato, puoi modificare il fattore di scala del livello su 2.0, ma se lo fai senza fornire contenuti ad alta risoluzione, il tuo contenuto esistente potrebbe apparire più piccolo di quanto ti aspettavi. Per risolvere il problema , è necessario fornire contenuti a più alta risoluzione per il livello .
Sto avendo difficoltà immaginando uno strato senza vista, posso immaginare una gerarchia di livelli, ma non appena voglio visualizzare li dovrei aggiungerlo come subhierachy di strato di supporto della vista, o esistono altri modi per usarli (come la creazione e il rendering in un contesto)?
Nucleo motore di compositing di animazione guarda la proprietà contentsScale di ogni strato per determinare se il contenuto di quello strato devono essere scalati durante compositing. Se l'applicazione crea livelli senza una vista associata, il fattore della scala di ogni nuovo oggetto livello è inizialmente impostato su 1.0. Se non si modifica il fattore di scala e se si disegna successivamente il livello su uno schermo ad alta risoluzione , il contenuto del livello viene ridimensionato automaticamente per compensare per la differenza di fattori di scala. Se non si desidera ridimensionare il contenuto , è possibile modificare il fattore di scala del livello su 2.0, ma se lo fai senza fornire contenuti ad alta risoluzione, il tuo contenuto esistente potrebbe apparire più piccolo di quanto ti aspettassi. Per risolvere il problema , è necessario fornire contenuti a più alta risoluzione per il livello.
Che cosa significa in realtà? Quando faccio qualcosa del genere, layer.contents = (id)image.CGImage
ho bisogno di impostare il contenutoScale.
Devo anche impostarlo quando il mio livello disegna il suo contenuto chiamando il metodo delegato drawLayer:inContext:
e il livello non è il livello di supporto di una vista?
Nel caso ** iOS **, è completamente spiegato qui: https://stackoverflow.com/a/ 47760444/294884 e qui: https://stackoverflow.com/a/47778332/294884 Spero che aiuti qualcuno. – Fattie