UIButton的IB_DESIGNABLE无法呈现实例

时间:2015-10-23 02:43:06

标签: ios ios8 uibutton xcode7

我创建了一个UIButton类的类别,使用IB_DESIGNABLE。但是我得到了一个奇怪的错误Failed to render instance of RoundedCornerButton: Rendering the view took longer than 200 ms. Your drawing code may suffer from slow performance.我在这个网站上尝试了很多建议,但仍然无法修复它。请帮我找到根本原因。请查看图片了解更多细节(RoundedCornerButton:是UIButton类的类别)

enter image description here

更新RoundedCornerButton类的代码:

.h文件

  #import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface RoundedCornerButton : UIButton
@property (nonatomic) IBInspectable int cornerRadius;
@property (nonatomic) IBInspectable int borderWidth;
@property (nonatomic) IBInspectable UIColor* borderColor;
@end

.m文件:

  #import "RoundedCornerButton.h"

@implementation RoundedCornerButton

-(void)drawRect:(CGRect)rect{
    self.layer.borderWidth = self.borderWidth;
    self.layer.borderColor = self.borderColor.CGColor;
    [self.layer setCornerRadius:self.cornerRadius];
    self.clipsToBounds = YES;

}
@end

我可以在设备上成功运行我的项目,但我得到了如上所述的红色警告。(这很奇怪,我使用的是Xcode 7.0)

1 个答案:

答案 0 :(得分:3)

您不能像layer那样使用drawRect。那不是画画!绘图是关于内容的。

将该代码移到其他地方,例如awakeFromNibprepareForInterfaceBuilder(两者),一切都会好的。

以下是示例代码:

@implementation RoundedCornerButton

-(void) config {
    self.layer.borderWidth = self.borderWidth;
    self.layer.borderColor = self.borderColor.CGColor;
    [self.layer setCornerRadius:self.cornerRadius];
    self.clipsToBounds = YES;
}

-(void)prepareForInterfaceBuilder {
    [self config];
}

-(void)awakeFromNib {
    [super awakeFromNib];
    [self config];
}

@end

你可以看到它在Xcode 7中的IB中运行良好:

enter image description here