我正在尝试在自定义UIButton周围绘制边框。 这不起作用:
为什么?
答案 0 :(得分:10)
click here to solve the problem
请允许我在这里重复一遍.. ^ _ ^
运行时属性功能允许我们设置UIColor类型,我们需要将其转换为CGColor类型。 为了实现这一点,我们需要扩展CALayer类具有将UIColor转换为CGColor的属性,我们需要边框和阴影。
您可以使用类别扩展Objective-C中的类。我添加了两个名为borderIBColor和shadowIBColor的属性,类型为UIColor。 IB代表界面构建器。我必须给这些属性一个唯一的名称,以避免名称与名为borderColor和shadowColor的属性CGColor类型冲突。
请参阅以下代码。
<强>的CALayer + RuntimeAttribute.h 强>
@import QuartzCore;
@interface CALayer (IBConfiguration)
@property(nonatomic, assign) UIColor *borderIBColor;
@end
<强>的CALayer + RuntimeAttribute.m 强>
@implementation CALayer (IBConfiguration)
- (void)setBorderIBColor:(UIColor *)color {
self.borderColor = color.CGColor;
}
- (UIColor *)borderIBColor {
return [UIColor colorWithCGColor:self.borderColor];
}
@end
最后,当你在xib或storyboard中设置运行时属性功能的 borderColor 时,请设置 borderIBColor 而不是 borderColor 。它看起来像 layer.borderIDColor
祝你玩得开心。
答案 1 :(得分:3)
cornerRadius&amp; cornerRadius是CGFloat,使用Number来改变。
borderColor是CGColor,无法通过运行时属性进行更改。 (您可以添加一个类别以支持UIColor来更改CGColor)
助手类别:
的UIView + IBHelper.h:
@interface UIView (IBHelper)
- (void)setBorderColor:(UIColor *)color;
@end
的UIView + IBHelper.m:
@implementation UIView (IBHelper)
- (void)setBorderColor:(UIColor *)color
{
self.layer.borderColor = color.CGColor;
}
@end
并在运行时属性中使用borderColor。直接
答案 2 :(得分:0)
分配其他属性后,您忘记了layer.masksToBounds = true属性。 它对我有用。
答案 3 :(得分:0)
适用于 UIBuilder 爱好者的 Swift 5 解决方案:
#1 对于 UIButton,它停留在 CGColor 世界中,但用户定义的运行时属性仅提供 UIColor 选择。这些协议不匹配,所以你的边框不会显示,因为没有颜色。修复:
在您的 viewDidLoad 中,使用...以编程方式设置 borderColor
{
"Write pdb": {
"prefix": "pdb",
"body": [
"import pdb; pdb.set_trace()",
"$2"
],
"description": "Write pdb.set_trace() to debug Python scripts"
}
}
#2 确保所有其他属性(borderWidth、cornerRadius)在格式中都有“layer”。所以应该是 layer.cornerRadius Number 1 [见图片]
#3。你不需要 maskToBounds