我创建了一个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类的类别)
更新: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)
答案 0 :(得分:3)
您不能像layer
那样使用drawRect
。那不是画画!绘图是关于内容的。
将该代码移到其他地方,例如awakeFromNib
和prepareForInterfaceBuilder
(两者),一切都会好的。
以下是示例代码:
@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中运行良好: