2010-11-29 14 views
19

Mi pregunta es muy similar a esta Not drawing outside bounds when clipToBounds=NO que no recibió una respuesta clara.dibujar fuera de los límites de UIView desde drawRect

Básicamente tengo una UIView, y quiero dibujar una línea desde el centro hasta el borde de la pantalla. Calcular dónde están estos puntos es fácil, usando [self convertPoint:(CGPoint){0,0} fromView:[self superview]]; (que encuentra el origen con respecto a la supervista de mi vista. Pero cuando dibujo una línea del drawRect de mi vista: se recorta en los límites de mi vista

¿Hay alguna manera de dibujar fuera de los límites de mi vista? He intentado cambiar la propiedad clipsToBounds, pero no parece tener ningún efecto.

No puedo dibujar mis líneas desde la supervista porque necesito hacer esto con múltiples vistas y algunos estarán delante de otros ... descifrar la capa del drawview de la superviewRect parece una mala idea.

Del mismo modo, no creo que pueda cambiar el tamaño de los límites de mi vista para incluir toda la pantalla, porque mis vistas deben ser dinámicamente redimensionables ... los límites tendrían que ser ENORMES (> 20,000 puntos cuadrados) para que esto funcione.

+0

Para el registro, fui con una vista de hermanos, y simplemente enganché todos los métodos que uso para volver a ordenar la vista para asegurarme de que también muevan la vista de hermanos. Esto hizo que el rendimiento fuera mucho mejor, porque el tamaño máximo para cualquiera de mis vistas es el tamaño de la pantalla. –

Respuesta

8

No recomendaría dibujar fuera de los límites de una vista. O bien su vista necesita cambiar el tamaño automáticamente para incluir su dibujo o necesita tener vistas superpuestas transparentes. O ambos. No puedo pensar en una situación que ninguno de estos casos cubriera, pero puede que carezca de imaginación. =)

Probablemente lo que está sucediendo actualmente es que cuando la supervista se vuelve a dibujar le dice a la súper vista que necesita volver a dibujarse, lo que provoca que se borre el dibujo que está haciendo afuera. Ha pasado un tiempo, cualquiera que esté más informado puede (¡debería!) Corregirme aquí si me equivoco.

No sé si "Quartz Debug" (de las herramientas estándar de Apple para instalar, /Developer/Applications/Performance Tools/Quartz Debug) funciona en el simulador, pero vale la pena intentarlo. Tiene un modo que le mostrará cuándo y con qué frecuencia se realiza el redibujado, con un borde y demora opcional en las actualizaciones.

Puede hacer lo que está pidiendo, pero debe obligar a volver a dibujar sus subvistas cada vez que salga de los límites de la subvista, lo que significa que su supervista debe dibujar manualmente sus elementos dentro de su función de dibujar . Básicamente, estarías descartando el paradigma de dibujo de Apple y simplemente haciendo que tus sub-vistas actúen como una extensión de dibujo de tu vista principal de todos modos.

Además, si sus rangos son tan dinámicos, puede considerar dibujar porcentajes de la pantalla o super-vista en lugar de puntos, puede tener más sentido codificar.

+0

Gracias por el consejo. Fue útil analizar el problema desde un ángulo diferente. Fui con puntos de vista de hermanos. –

+13

Tengo un caso de uso: quiero dibujar un rectángulo que se adapte perfectamente a los límites de su supervista; pero también quiero agregar un pequeño triángulo que apunta hacia abajo debajo del rectángulo. Para hacer esto de manera efectiva, necesito dibujar el pequeño triángulo fuera de los límites de la vista. –

Cuestiones relacionadas