Sé que esta pregunta ha sido larga, pero recientemente estaba en una situación similar, así que decidí poner mi respuesta para aquellos que se encuentran en una situación como esta.
que quería ser capaz de establecer el borderColor
y shadowColor
en una UIView
a través de la Interfaz del generador, pero el tipo de propiedad de una capa borderColor
es CGColor
(al igual que shadowColor
) que no es uno de los tipos permitidos para ser cambiado en la característica de atributos de tiempo de ejecución definida por el usuario.
así que hice una extensión para CALayer
y añadí dos propiedades llamadas borderColorIB y shadowColorIB que son de tipo UIColor:
RuntimeAttributes.h
@import QuartzCore;
@interface CALayer (IBConfiguration)
@property(nonatomic, assign) UIColor* borderColorIB;
@property(nonatomic, assign) UIColor* shadowColorIB;
@end
RuntimeAttributes.m
#import <UIKit/UIKit.h>
#import "RuntimeAttributes.h"
@implementation CALayer (IBConfiguration)
-(void)setBorderColorIB:(UIColor*)color
{
self.borderColor = color.CGColor;
}
-(UIColor*)borderColorIB
{
return [UIColor colorWithCGColor:self.borderColor];
}
-(void)setShadowColorIB:(UIColor*)color
{
self.shadowColor = color.CGColor;
}
-(UIColor*)shadowColorIB
{
return [UIColor colorWithCGColor:self.shadowColor];
}
@end
Ahora i todavia ser capaz de establecer estas dos propiedades a través de Interface Builder como esto:
- En la sección 'atributos de ejecución definidos por el usuario' (Identidad inspector)
Asegúrese se selecciona el UIView y añada el siguiente atributos de ejecución:
- layer.borderWidth, Número, 1
- layer.borderColorIB, Color, someColor
<- my custom property to set the borderColor
- layer.shadowColorIB, Color, someColor
<- my custom property to set the shadowColor
- layer.shadowOpacity, Número, 0,8
- layer.shadowOffset, tamaño, {5,5}
- capa. CornerRadius, Número, 5
Aquí está una imagen para mostrar cómo lo hice:
... y el resultado será evidente durante el tiempo de ejecución, no en Xcode:
espero que esto puede ayudar a algunas personas por ahí!
bastante al azar, acabo de descubrir el problema real no parece ser InterfaceBuilder, pero el hecho de que me puse clipsToBounds de mi vista InterfaceBuilder = SÍ. Tener NO aquí está bien. Así que supongo que tendré que ajustar la vista en una segunda vista con clipsToBound = NO y la sombra. ¿Hay otra manera? – Dennis
Tuve el mismo problema, pero fue porque "Clip Subviews" se verificó en la vista en Interface Builder. Al desmarcar eso, se hizo visible la sombra de CALayer. – azdev