2009-10-13 23 views
6

me gustaría dibujar un borde/sombra alrededor de un uiscrollview, sé que podría llegar allí con una vista adicional o scrollview pero no me gusta el manejo de inconvenientes pero escuché que debería haber una posibilidad de dibujar un borde con una vista de desplazamiento y eso es lo que preferiría.Sombra o borde alrededor de un scrollview iphone

Soy tranquilo nuevo para el desarrollo de iphone, cualquier respuesta sería útil.

Respuesta

17

Si utiliza la propiedad de capa de la vista de desplazamiento (o cualquier UIView) se puede obtener fácilmente un borde sólido ...

#import <QuartzCore/QuartzCore.h> 
... 
myView.layer.borderWidth = 2; 
myView.layer.borderColor = [UIColor blackColor].CGColor; 

También puede utilizar la capa para aplicar sombras en tiempo real mediante el establecimiento las propiedades layer.shadow*, pero el rendimiento puede ser lento con esta técnica, por lo que generalmente prefiero usar la siguiente técnica más compleja pero más eficaz. Puede crear una imagen PNG con transparencia en el medio y sombras alrededor del borde; necesita tener 9 áreas distintas: 4 para cada esquina, 4 para cada borde y un área de píxeles completamente transparente de 1x1 en el centro. Por ejemplo, si su sombra se extiende a 6 píxeles en su imagen, su imagen sería 13x13 con los bordes de 6 píxeles de ancho/alto y el área de 1x1 en el centro. A continuación, se establece como una imagen escalable usando:

newImage = [image stretchableImageWithLeftCapWidth:6 topCapHeight:6]; 

ACTUALIZACIÓN: Desde iOS 5.0 stretchableImageWithLeftCapWidth:topCapHeight: es obsoleto a fin de utilizar sólo esto si todavía quieres para soportar dispositivos iOS 4.x. Si quieres apoyar sólo los dispositivos iOS 5.0+ utilizan este lugar:

newImage = [image resizableImageWithCapInsets:UIEdgeInsetsMake(6, 6, 6, 6)]; 

a continuación, poner la imagen en la vista padre para que ocupe toda el área de la vista de desplazamiento. Si desea que las sombras cubran sus elementos desplazables, (para que su vista de desplazamiento se inserte/detrás del resto de la página), coloque una UIView transparente sobre la parte superior con la imagen sombreada para que se vea en su vista de desplazamiento Detrás de eso.

1

myView.layout.borderColor genera una advertencia de puntero incompatible cuando se utiliza UIColor, y no cambió el borde para mí.

Usando CGColorRef trabajó para mí en su lugar:

CGFloat lComponents[4] = {0,0,0,1}; 
CGColorSpaceRef lColorSpace = CGColorSpaceCreateDeviceRGB(); 
myView.layer.borderColor = CGColorCreate(lColorSpace, lComponents); 
CGColorSpaceRelease(lColorSpace); 
2

Para obtener el CGColorRef de un UIColor también puede utilizar este ejemplo:

myView.layer.borderWidth = 2; 
myView.layer.borderColor = [UIColor blackColor].CGColor; 
+0

increíble, eso me gustó muy bien :) –

5

No se olvide de:

#import <QuartzCore/QuartzCore.h> 

Si desea utilizar

myView.layer.borderWidth = 2; 
myView.layer.borderColor = [UIColor blackColor].CGColor; 
Cuestiones relacionadas