Wiem, że to pytanie jest długie, ale ostatnio byłem w podobnej sytuacji, więc postanowiłem udzielić mojej odpowiedzi tym, którzy znajdują się w takiej sytuacji.
Chciałem być w stanie ustawić borderColor
i shadowColor
na zasadzie UIView
przez Builder interfejsu, ale typ warstwy borderColor
nieruchomości jest CGColor
(podobnie jak shadowColor
), który nie jest jednym z rodzajów dozwolonych zostać zmienione w zdefiniowana przez użytkownika funkcja atrybutów środowiska wykonawczego.
więc zrobiłem rozszerzenie dla CALayer
i dodałem dwie właściwości zwane borderColorIB i shadowColorIB że są typu 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
Teraz ja alredy móc ustawić te dwie właściwości poprzez interfejs Builder tak:
- W sekcji atrybutów wykonywalne zdefiniowane przez użytkownika "(Identity inspektor)
Upewnij UIView jest zaznaczona, a następnie dodaj następujące atrybuty środowiska wykonawczego:
- layer.borderWidth, Numer, 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, Ilość 0,8
- layer.shadowOffset, rozmiar {5,5}
- warstwy. cornerRadius, Number, 5
Oto obraz, aby pokazać, jak to zrobiłem:
... i wynik będzie widoczne w czasie wykonywania, a nie w Xcode:
mam nadzieję, że to może pomóc niektórym ludziom tam!
Zupełnie przypadkowo, po prostu okazało się, rzeczywisty problem nie wydaje się być InterfaceBuilder, ale fakt, że mogę ustawić clipsToBounds mojego InterfaceBuilder widzenia użytkownika = TAK. Brak NO tutaj jest w porządku. Sądzę więc, że będę musiał zawinąć widok w drugim widoku za pomocą clipsToBound = NO i cienia. Czy istnieje inny sposób? – Dennis
Miałem ten sam problem, ale to dlatego, że "Klip subviews" został sprawdzony pod kątem widoku w Konstruktorze interfejsu. Odznaczenie, które spowodowało, że cień CALayera jest widoczny. – azdev