Я знаю, что этот вопрос давно, но недавно я был в похожей ситуации, поэтому я решил поставить свой ответ для тех, кто находится в такой ситуации.
Я хотел иметь возможность установить borderColor
и shadowColor
на UIView
через Interface Builder, но тип свойства borderColor
слоя - CGColor
(как shadowColor
), что не является одним из типов, которые можно изменять в пользовательской функции атрибутов среды выполнения.
Итак, я сделал расширение для CALayer
и добавил два свойства с именами borderColorIB и shadowColorIB, которые имеют тип 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
Теперь я уже могу установить эти два свойства через Interface Builder следующим образом:
- В разделе «Атрибуты пользовательской среды выполнения» (инспектор удостоверений)
Убедитесь, что выбран UIView, и добавьте следующие атрибуты времени выполнения:
- layer.borderWidth, Number, 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, Число, 0,8
- layer.shadowOffset, size, {5,5}
- layer.cornerRadius, Number, 5
Вот изображение, чтобы показать вам, как я это сделал:
... и результат будет очевиден во время выполнения, а не в Xcode:
Надеюсь, это поможет некоторым людям!