【问题标题】:CGContextRef isn't working with @IBDesignable (Error:The agent Crashed)CGContextRef 不适用于@IBDesignable(错误:代理崩溃)
【发布时间】:2015-12-11 05:44:16
【问题描述】:

我正在创建一个 UIButton 子类来添加一些绘图。它在代码中运行良好。当我通过 @IBdesignable 尝试时,它给出了以下错误。

  1. 错误:IB Designables:无法更新自动布局状态: 代理崩溃了

  2. 错误: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 中会崩溃

【问题讨论】:

    标签: ios swift core-graphics xcode7.1 ibdesignable


    【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 2015-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-18
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多