CGContextRef 不适用于@IBDesignable(错误:代理崩溃)
Posted
技术标签:
【中文标题】CGContextRef 不适用于@IBDesignable(错误:代理崩溃)【英文标题】:CGContextRef isn't working with @IBDesignable (Error:The agent Crashed) 【发布时间】:2015-12-11 05:44:16 【问题描述】:我正在创建一个 UIButton 子类来添加一些绘图。它在代码中运行良好。当我通过 @IBdesignable 尝试时,它给出了以下错误。
错误:IB Designables:无法更新自动布局状态: 代理崩溃了
错误:IB Designables:无法呈现 DashboardHeaderView:代理崩溃
以下是代码示例
let context:CGContextRef = UIGraphicsGetCurrentContext()!
UIGraphicsPushContext(context)
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0);
var path:UIBezierPath!
let pathRect:CGRect = CGRectMake(strokeWidth / 2, strokeWidth / 2, pathSize - iconStrokeWidth, pathSize - iconStrokeWidth);
path = UIBezierPath(rect: pathRect )
iconColor.setStroke()
iconPath.lineWidth = iconStrokeWidth;
iconPath.stroke()
CGContextAddPath(context, iconPath.CGPath);
let image:UIImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsPopContext();
UIGraphicsEndImageContext();
代理崩溃错误发生在
let context:CGContextRef = UIGraphicsGetCurrentContext()!
我重写了 init + drawRect + initilizeButtonDrawings 但没有得到任何积极的结果
required init(coder aDecoder: NSCoder)
super.init(coder: aDecoder)!
self.initilizeButtonDrawings()
override init(frame: CGRect)
super.init(frame: frame)
self.initilizeButtonDrawings()
override func drawRect(rect:CGRect)
super.drawRect(rect)
self.initilizeButtonDrawings()
override func prepareForInterfaceBuilder ()
self.initilizeButtonDrawings()
所有这些都可以在 Objective C 中正常工作,但在 swift 中会崩溃
【问题讨论】:
【参考方案1】:我通过以下更新解决了这个问题...
let rect:CGRect = CGRectMake(0, 0, iconSize, iconSize)
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0);
let context = UIGraphicsGetCurrentContext()
// draw icon
var iconPath:UIBezierPath!
let iconRect:CGRect = CGRectMake(iconStrokeWidth / 2, iconStrokeWidth / 2, iconSize - iconStrokeWidth, iconSize - iconStrokeWidth);
if self.iconSquare
iconPath = UIBezierPath(rect:iconRect )
else
iconPath = UIBezierPath(ovalInRect:iconRect)
iconColor.setStroke()
iconPath.lineWidth = iconStrokeWidth;
iconPath.stroke()
CGContextAddPath(context, iconPath.CGPath);
let image:UIImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
【讨论】:
以上是关于CGContextRef 不适用于@IBDesignable(错误:代理崩溃)的主要内容,如果未能解决你的问题,请参考以下文章