我正在尝试使用Quartz绘制一个花哨的UIButton。我已经声明了我自己的按钮类:
@interface MyButton : UIButton
@end
在.m文件中我正在构建按钮:
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
// Initialization code
CALayer *buttonLayer = self.layer;
buttonLayer.masksToBounds = YES;
CALayer *customDrawn = [CALayer layer];
customDrawn.delegate = self;
customDrawn.masksToBounds = YES;
[buttonLayer insertSublayer:customDrawn atIndex:0];
[customDrawn setNeedsDisplay];
}
return self;
}
但是这会导致某种递归,最后会失败EXC_BAD_ACCESS
。
我已经实现了一个方法drawLayer: inContext:
,但它仍然崩溃了。我可以避免崩溃的唯一方法是删除委托分配,但是我不能执行任何我想要实现的自定义绘图。
我该如何做到这一点?
答案 0 :(得分:0)
如Kurt Revis提到的问题所述,UIView(例如UIButton)不能用作子层的委托。 (它已经是UIView的“主”层的委托,不能用作另一层的委托。)解决方案是使用另一个对象作为委托,它可以是一个“私有”类,仅用于实施drawLayer: inContext:
方法。