实现步骤(问题复现)
1、在xib中 identity inspector —> User Defined Runtime Attributes —> 添加Key Path以及Value。
设置圆角:layer.cornerRadius 对应ValueType为Number或者String。如果Value值为正方形width的一半,则为圆形。
设置边框宽度:layer.borderWidth 对应ValueType为Number或者String。
设置边框颜色:layer.borderColor 对应ValueType为Color。
出现问题
这样设置后,圆角,宽度都生效了,可是边框的颜色是黑色,也就是设置边框颜色没有生效。
问题原因
到QuartzCore.framework中找到CALayer.h这个头文件,搜索borderColor这个属性 @property(nullable) CGColorRef borderColor; 到这里 我们就可以找到原因了。在User Defined Runtime Attributes 中设置layer.borderColor的ValueType为Color,这里的Color对应的是UIColor,而设置layer.borderColor需要是CGColor类型,因此没有生效。关于 UIColor CGColor CIColor的区别联系。
问题解决
建立一个CALayer的分类Category,在该分类中添加一个属性,在该属性的setter方法中将该UIColor转化成CGColor赋值给borderColor,然后在xib中添加该属性的key path。
e.g.
// CALayer+XibBorderColor.h
@interface CALayer (XibBorderColor)
@property (nonatomic, strong) UIColor *borderColorWithUIColor;
@end
// CALayer+XibBorderColor.m
#import "CALayer+XibBorderColor.h"
@implementation CALayer (XibBorderColor)
- (void)setBorderColorWithUIColor:(UIColor *)borderColorWithUIColor {
self.borderColor = borderColorWithUIColor.CGColor;
}
@end