Estoy tratando de dibujar una sombra debajo del borde inferior de a UIView
en Cocoa Touch. Entiendo que debería usar CGContextSetShadow()
para dibujar la sombra, pero la guía de programación 2D de Quartz es un poco vaga:
- Guarda el estado de los gráficos.
- Llame a la función
CGContextSetShadow
, pasando los valores apropiados. - Realice todo el dibujo al que desea aplicar sombras.
- Restaurar el estado de los gráficos
He intentado lo siguiente en una UIView
subclase:
- (void)drawRect:(CGRect)rect {
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextSaveGState(currentContext);
CGContextSetShadow(currentContext, CGSizeMake(-15, 20), 5);
CGContextRestoreGState(currentContext);
[super drawRect: rect];
}
... pero esto no funciona para mí y estoy un poco atascado sobre (a) dónde ir después y (b) si hay algo que necesito hacer UIView
para que esto funcione.
fuente
#import <QuartzCore/QuartzCore.h>"
al archivo .h.masksToBounds
paraNO
negar elcornerRadius
, ¿no?self.layer.backgroundColor = [[UIColor whiteColor] CGColor];
pero no tuve suerte. ¿Qué vista debe ser transparente?Esto ralentizará la aplicación. Agregar la siguiente línea puede mejorar el rendimiento siempre que su vista sea visiblemente rectangular:
fuente
La misma solución, pero solo para recordarle: puede definir la sombra directamente en el guión gráfico.
Ex:
fuente
UIView
oCGLayer
que sea unUIColor
contenedor para laCGColor
propiedad;)Puedes probar esto ... puedes jugar con los valores. El
shadowRadius
dicta la cantidad de desenfoque.shadowOffset
dicta dónde va la sombra.fuente
Solución simple y limpia usando Interface Builder
Agregue un archivo llamado UIView.swift en su proyecto (o simplemente péguelo en cualquier archivo):
Entonces esto estará disponible en Interface Builder para cada vista en el Panel de utilidades> Inspector de atributos:
Puede configurar fácilmente la sombra ahora.
Notas:
- La sombra no aparecerá en IB, solo en tiempo de ejecución.
- Como dijo Mazen Kasser
fuente
Failed to set (shadowColor) user defined inspected property on (UICollectionViewCell): [<UICollectionViewCell> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key shadowColor.
UIKit
para que funcione, laFoundation
importación básica creada por XCode no es suficiente, pero se compila bien. Debería haber copiado todo el código fuente. Gracias Axel por esta buena solución.Lo uso como parte de mis utilidades. Con esto no solo podemos establecer sombras, sino que también podemos obtener una esquina redondeada para cualquiera
UIView
. También puede establecer qué color de sombra prefiere. Normalmente se prefiere el negro, pero a veces, cuando el fondo no es blanco, es posible que desee algo más. Esto es lo que uso:Para usar esto, debemos llamar a esto:
[utils roundedLayer:yourview.layer radius:5.0f shadow:YES];
fuente
Swift 3
fuente
installShadow()
no se invoca desdeviewDidLoad()
oviewWillAppear()
draw
método de vista sobrecargado . La sombra viene correctamente pero la esquina redondeada no.UIStackView
que solo tiene diseño y no tiene vista. Es posible que tenga que insertar una regularUIView
como contenedor para todo.Si desea utilizar StoryBoard y no desea seguir escribiendo atributos de tiempo de ejecución, puede crear fácilmente una extensión para las vistas y hacer que se puedan usar en el guión gráfico.
Paso 1. crear extensión
paso 2. ahora puedes usar estos atributos en el guión gráfico
fuente
Para aquellos que no pudieron hacer que esto funcione (¡como yo mismo!) Después de probar todas las respuestas aquí, solo asegúrese de que las Subvistas de Clip no estén habilitadas en el inspector de Atributos ...
fuente
Swift 3
fuente
Puede usar mi función de utilidad creada para sombra y radio de esquina como se muestra a continuación:
¡¡¡Espero que te ayude!!!
fuente
Todos responden bien pero quiero agregar un punto más
Si encuentra un problema cuando tiene celdas de tabla, Deque una nueva celda no coincida en la sombra, por lo que en este caso, debe colocar su código de sombra en un método layoutSubviews para que se comporte bien en todas las condiciones.
o en ViewControllers para una vista específica, coloque el código sombra dentro del siguiente método para que funcione bien
He modificado mi implementación en la sombra para nuevos desarrolladores para una forma más generalizada, por ejemplo:
fuente
Para los compañeros Xamarianos, la versión Xamarin.iOS / C # de la respuesta sería similar a la siguiente:
La principal diferencia es que adquiere una instancia
CGContext
en la que llama directamente a los métodos apropiados.fuente
Puedes usar esto
Extension
para agregar sombrapuedes llamarlo como
fuente
Sketch Shadow usando IBDesignable e IBInspectable en Swift 4
fuente