2011-05-18 9 views
14

Esto funciona muy bien en el iPhone 4 y 3GS:redondeado UIScrollView Rendimiento

scrollView.layer.cornerRadius = 11; 
scrollView.layer.masksToBounds = YES; 

Pero en el iPhone 3G y el iPod touch de 2ª generación, que permite desplazarse muy desigual. Sé que hay algunos trucos sobre cómo mejorar el rendimiento de las sombras paralelas CALayer, por ejemplo (configuración shouldRasterize en YES y la propiedad shadowPath), ¿hay algo similar que se pueda hacer para la esquina de CALayerRadius?

+0

hmm ... tengo entendido que los cglayers se representan en la GPU. Puede ser la fuente de tus problemas. –

+0

¿Sugiere alguna solución? Soy consciente de que los dispositivos más antiguos tienen GPU mucho más lentos. ¿No hay una forma de obtener los mismos resultados pero usando la CPU? – samvermette

+0

Creo que el problema es que está usando la CPU en lugar de la GPU para renderizar las esquinas redondeadas. Por lo que yo sé, la única forma de obtener esquinas redondeadas rápidas en dispositivos más antiguos es evitar 'cornerRadius' y en su lugar hacer su dibujo recortado en' drawRect: 'o dibujar en un' UIImage'. –

Respuesta

7

¿El contenido de la vista de desplazamiento (lo que se muestra debajo de las esquinas redondeadas) es de color sólido o estático? Si es así, podrá obtener un rendimiento mucho mejor al superponer gráficos de "esquina", translúcidos en el centro y opacos (con el color de fondo o lo que sea) en sus bordes, en la parte superior de las esquinas de la vista de desplazamiento. El costo de composición de cuatro imágenes de 11x11 sobre su contenido será mucho menor que el de recortarlo.

+0

Como dije en los comentarios de la pregunta, mi contenido detrás de la vista de desplazamiento no es solo una imagen, sino también dinámica. Así que tendría que generar las 4 imágenes de esquina redondas en tiempo de ejecución cada vez que se cambia la imagen de fondo. ¿No hay una manera de hacerlo con CoreGraphics usando CGContextClip()? – samvermette

+0

Lo siento, no leí todos los comentarios. Por lo que yo sé, los CALayers ya usan el recorte de Core Graphics para renderizar sus esquinas. Es posible que tengas que generar las cuatro imágenes de esquina en tiempo de ejecución, probablemente utilizando el método '-renderInContext:' del superjuego y luego cortar las piezas. –

2

La representación de CALayers es demasiado lenta para este uso (especialmente en los dispositivos más antiguos), no es muy buena para usar en juegos, etc. Puedes cambiar a UIImages o cocos2d, otra opción es crear tu propia capa clase con OpenGL, aunque ese no es tan simple. Espero que una de esas opciones funcione para ti.