2011-12-26 9 views
7

Actualmente estoy trabajando en una reescritura de un tweak (se ejecuta dentro de SpringBoard sí mismo) y por lo tanto (de causa) la suavidad, velocidad y eficiencia son algunas de las cosas más importantes para mí, ya que incluso el más mínimo lag innecesario le quitará de la UX.¿La mejor y más rápida forma de redondear las esquinas de UIView?

Así que mi pregunta es ¿cómo puedo redondear las esquinas de las vistas con la mínima cantidad de retraso?

La más obvia es:

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

Sin embargo he oído que la fijación de una máscara con CALayer layer.mask es más rápido? Y, en caso afirmativo, ¿cuál de estas 2 soluciones es la mejor ?: https://stackoverflow.com/a/4930166/458205

Este código utiliza enmascaramiento, sin embargo, la capa de la máscara también usa cornerRadius, ¿es esto realmente más rápido?

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

¿O Solución 1, del enlace anterior, o this answer ser más eficiente?

Sé que me estoy refiriendo a otra pregunta varias veces, sin embargo, esa pregunta es sobre enmascarar solo 2 esquinas (que arroja algunas soluciones diferentes), pero estoy pidiendo la forma más eficiente de tener 0.6 vistas de tamaño de pantalla tan suavemente como sea posible con las esquinas redondeadas (como esta imagen). CardSwitcher Screenshot

+0

Está saliendo de mi cabeza, pero ¿no podrías simplemente subclase UIView? – Ravi

+1

@Ravi sí sin embargo ¿qué método usaría en la subclase? Esa es mi pregunta. –

Respuesta

1

El primer fragmento es más eficiente porque la esquina redondeada es una máscara en sí misma. para aumentar el rendimiento de las esquinas redondeadas uso: view.layer.shoudRasterize = YES;

+0

Probé esto, pero no aumenta el rendimiento, solo hace que la vista no sea HD – JomanJi

+0

JomanJi usted necesita establecer también la propiedad 'rasterizationScale' del CALayer. –

3

Necesita establecer rasterizationScale así como view.layer.shouldRasterize.

normalmente hago esto:

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

Si no se establece la rasterizationScale siempre pondrá por defecto a una escala de 1 (no de la retina en este caso) para la rasterización.

Para mí esto generalmente pone mi rendimiento de desplazamiento a la par con UITableView.

Cuestiones relacionadas