Storyboard更改layer层属性

383 阅读1分钟

在某些时候会觉得使用Storyboard来实现一些简单界面的ViewController会相对容易。可是在Storyboard中,你会发现像layer层的属性都没办法修改,也就是说没办法添加边界,更改圆角之类的操作。

不过还好,在Storyboard中有一个地方可以让我们修改视图Runtime Attributes

Defined Runtime Attributes

在这里,我们可以对layer的属性进行修改。像cornerRadius或者borderWidth等数值类型的类型会变成NSNumber类型。而borderColor这样的颜色值的话,你会发现,虽然设置为Color类型,但是实际上没有crash,没有报错,但是view的layer并没有把borderColor显示出来。

因为这里的Color是UIColor类型,而layer的color要求是CGColorRef类型的。这两者之间没有办法直接转换。

所以我们只能通过Category来添加一个属性用于转换

CALayer+XibConfiguration.h

#import <QuartzCore/QuartzCore.h>
#import <UIKit/UIKit.h>

@interface CALayer (XibConfiguration)
@property (nonatomic, assign) UIColor *borderColorFromUIColor;
@end

CALayer+XibConfiguration.m

#import "CALayer+XibConfiguration.h"

@implementation CALayer (XibConfiguration)
- (UIColor *)borderColorFromUIColor {
    return [UIColor colorWithCGColor:self.borderColor];
}

- (void)setBorderColorFromUIColor:(UIColor *)color {
    self.borderColor = color.CGColor;
}
@end

然后将Storyboard中的Key Path从layer.borderColor更改为layer.borderColorFromUIColor即可。


参考链接

让Storyboard控制更多的样式