2011-12-26 12 views
7

Attualmente sto lavorando a una riscrittura di un tweak (viene eseguito all'interno di SpringBoard stesso) e quindi (di causa) la fluidità, la velocità e l'efficienza sono alcune delle cose più importanti per me perché anche il minimo ritardo non necessario ci porterà via dalla UX.Il modo migliore e più veloce per arrotondare gli angoli di UIView?

Quindi la mia domanda è: come è possibile arrotondare gli angoli delle viste con una quantità minima di ritardo.

La più ovvia è:

view.layer.cornerRadius = value; 
view.layer.masksToBounds = YES; 

Comunque ho sentito che l'impostazione di un CALayer maschera con layer.mask è più veloce? E se sì quale di queste 2 soluzioni è la migliore ?: https://stackoverflow.com/a/4930166/458205

Questo codice utilizza la mascheratura, tuttavia il livello maschera utilizza anche cornerRadius, quindi è effettivamente più veloce?

CALayer *maskLayer = [CALayer layer]; 
maskLayer.cornerRadius = radius; 
// set the mask 
self.view.layer.mask = maskLayer; 

O avrebbero Soluzione 1, del link qui sopra, o this answer essere più efficiente?

So che sto facendo riferimento a un'altra domanda più volte, tuttavia quella domanda riguarda il mascheramento di solo 2 angoli (che genera alcune soluzioni diverse), tuttavia, sto chiedendo il modo più efficiente per avere 0.6 visualizzazioni di dimensioni dello schermo scorrere il più agevolmente possibile con angoli arrotondati (come questa immagine). CardSwitcher Screenshot

+0

Stava appena venendo fuori di testa, ma non potevi semplicemente sottoclasse UIView? – Ravi

+1

@Ravi si comunque quale metodo dovrei usare nella sottoclasse? Questa è la mia domanda. –

risposta

1

Il primo frammento è più efficiente perché l'angolo arrotondato è una maschera di per sé. per aumentare le prestazioni degli angoli arrotondati utilizzare: view.layer.shoudRasterize = YES;

+0

Provato questo, ma non aumenta le prestazioni, rende solo la vista non-HD – JomanJi

+0

JomanJi è necessario impostare anche la proprietà 'rasterizationScale' del CALayer. –

3

È necessario impostare rasterizationScale e view.layer.shouldRasterize.

Io di solito faccio questo:

view.layer.shouldRasterize = YES; 
view.layer.rasterizationScale = [[UIScreen mainScreen] scale]; 

Se non si imposta il rasterizationScale sarà sempre automaticamente a una scala da 1 (non-retina, in questo caso) per la rasterizzazione.

Per me questo di solito mette le mie prestazioni di scorrimento alla pari con quelle di UITableView.

Problemi correlati