2010-05-26 9 views
8

Estoy experimentando con el uso de cagradientlayer para dibujar degradados en nuestra aplicación en lugar de tener una subclase de uiview gestionar degradados. Una de las cosas que me he encontrado es que cuando la vista que tiene el degradado como una subcapa de su capa principal se cambia de tamaño para ajustarse a los datos que intento mostrar, la capa no cambia de tamaño junto con ella. Termino haciendo que la capa de degradado termine en el tamaño de fotograma original, mientras que el fotograma de mi vista es mucho más grande.¿cómo obtengo el marco de una capa para cambiar el tamaño automáticamente en función del marco de su superlayer o el marco de su vista?

¿Hay alguna manera de hacer que la subcapa cambie de tamaño para ajustarse al marco de su superlayer, o al marco de la vista del superlayer?

Respuesta

9

Implemente layoutSubviews en la subclase de su vista. Se llama cuando se cambia el tamaño del fotograma (o cuando se llama a setNeedsLayout). Sólo hay que establecer el marco de la capa a los límites de la vista:

-(void)layoutSubviews 
{ 
    someSubview.frame = self.bounds; // make the subview frame match its view 
} 
+0

que espero no necesitar una subclase en absoluto, pero algunas funciones que pueden existir en CALayers que yo parece que no puede encontrar que haría esto por mí (sin embargo, subclasificar una capa no está fuera de discusión). – Kevlar

+0

¿Cómo está cambiando el tamaño de la vista? Redimensiono las vistas configurando el marco y nunca tuve que cambiar el tamaño de las capas. – progrmr

+0

estoy configurando el marco en algunos casos, y permitiendo que la vista se vuelva a escribir en otros. Creo que el problema podría ser que cuando cambio el tamaño de las vistas de forma manual, desactivo el ajuste automático de las subvistas para que las subvistas no cambien de tamaño; ese podría ser mi problema – Kevlar

2

Esto funcionará aún mejor

-(void)viewWillLayoutSubviews 
+1

Mejor que qué? ¿Y por qué? Por favor, asegúrese de proporcionar respuestas completas. –

+0

Es mejor que haga lo que se pretende aquí, creo. – GregJaskiewicz

+0

En el momento en que hice esta pregunta, no creo que UIViewController tuviera ese método. Estoy de acuerdo en que si sus puntos de vista son vistas en stock gestionadas por un uiviewcontroller que desea hacer esto en lugar de layoutSubviews en una subclase UIView. – Kevlar

Cuestiones relacionadas