¿Cómo establecer un borde de degradado en UIView?

Es muy fácil colocar un borde simple en una UIView . Simplemente enlace a QuartzCore , QuartzCore y usa:

 self.view.layer.borderColor = [UIColor networkingColor].CGColor; self.view.layer.borderWidth = 2.0f; 

Mi pregunta es … ¿Hay alguna manera de hacer que este borde use un gradiente? Sé cómo aplicar una máscara de gradiente a toda la vista, pero no solo a su borde. Estoy asumiendo que esto podría involucrar una vista personalizada y el dibujo de drawRect: dentro de drawRect: pero no estoy seguro de por dónde empezar.

No estoy completamente seguro de lo que quieres decir con "gradiente". Dado que has dicho que has usado charts centrales para aplicar un degradado a una forma, supongo que quieres decir eso (y no la sombra a la que se refiere la respuesta anterior).

No puede aplicar un degradado a un borde. Sin embargo, puede crear su propio borde usando una forma personalizada. La forma más fácil de hacerlo es crear dos routes, una ruta externa y una ruta interna. Por motivos de simplicidad, supongamos que la ruta es un rect simple (el rectángulo dado en drawRect ):

 UIBezierPath *path = [UIBezierPath bezierPathWithRect:rect]; 

La segunda ruta será una ruta interna más pequeña que la primera (suficiente para hacer un borde):

 //To create a 1.0f borderWidth CGRect innerRect = rect; innerRect.origin.x += 1.0f; innerRect.origin.y += 1.0f; innerRect.size.width -= 2.0f; innerRect.size.height -= 2.0f; UIBezierPath *innerPath = [UIBezierPath bezierPathWithRect:innerRect]; 

Ahora, agregue la ruta interna a la ruta normal y asegúrese de que la ruta use evenOddFillRule. La regla evenOddFillRule le dirá a los charts principales que solo llenen la parte exterior, dejando sola la parte interna. Ah, y querrás recortar la ruta:

 [path appendPath:innerPath]; path.usesEvenOddFillRule = YES; [path addClip]; 

Si aplica un degradado a esta forma, se llenará fuera de la ruta interna y dentro de la ruta externa, formando un borde con un degradado.

ACTUALIZAR

Si estás orientado a iOS 5.0, puede haber una mejor manera de hacerlo. Descubrí una function de ruta nueva notable llamada CGPathCreateCopyByStrokingPath () . Vea el enlace para más detalles, pero básicamente crea una nueva ruta que es la (s) fuente (s) del original, de modo que si llena la nueva ruta, creará la misma image que la ruta anterior. Esto es fantástico porque en vez de llenar la nueva ruta, puedes recortarla y luego llenarla con un gradiente, que te da un borde de gradiente. Esto es mucho más fácil que el método anterior que mencioné, pero, por supuesto, solo está disponible en iOS 5.0. Esto también facilitará mucho la creación de nuevas forms complejas.

Creé una segunda capa de gradiente con los colors invertidos en la matriz, y luego hice el marco de la segunda capa un poco más pequeño que la primera capa. Crea la apariencia de un borde.