2011-04-14 11 views
7

Estoy usando un AQGridView para mostrar mis datos en una cuadrícula en el iPad. Cada celda es una subclase UIView y, por lo general, hay 18 celdas mostradas simultáneamente.UIView: esquinas redondeadas sin problemas de rendimiento

Me gustaría agregar una esquina redondeada a estas celdas, así que establecí la propiedad cornerRadius de las capas relevantes (es decir, la capa del principal UIView y de una subvista). Sin embargo, esto genera problemas de rendimiento y el desplazamiento ya no es uniforme. Cuando se usan otras propiedades CALayer, como shadowOpacity, esto no sucede.

¿Hay alguna otra forma de agregar una esquina redondeada (además de usar una imagen)? ¿O estoy haciendo algo mal?

Respuesta

27

También vi un gran golpe de rendimiento al usar cornerRadius en la capa de una vista que contenía una subvista UIImageView. Rasterización resolvió ese problema: view.layer.shouldRasterize = YES;

+2

literalmente me salvaste toneladas de mi tiempo! :) –

+0

Lo he usado antes con gran éxito. Sin embargo, al redondear las esquinas en toda la vista se produce una degradación en la calidad de toda la vista: https://skitch.com/franklinwebber/8q8c2/ios-simulator – burtlo

+18

Sin embargo, descubrí que el problema era que la rasterización se estaba realizando a un nivel demasiado bajo. de una resolución y esto resolvió el problema 'myView.layer.rasterizationScale = [[UIScreen mainScreen] scale];' – burtlo

0

Podría ser donde está realizando la llamada a setCornerRadius. Asegúrate de que sea un sitio que solo se llame una vez, no, por ejemplo, en un método drawRect.

+0

Está en el método 'init', así que supongo que no es un problema. – fabian789

+1

parece ser un problema común, ver http://stackoverflow.com/questions/4735623/uilabel-layer-cornerradius-negatively-impacting-performance – picciano

+0

Veo. Voy a crear una imagen entonces. ¿Podría convertir su comentario en una respuesta para que yo pueda aceptarlo? – fabian789