【发布时间】:2015-01-13 23:03:29
【问题描述】:
错误就发生在这一行:
UIGraphicsBeginImageContext(CGSize(width: 6, height: 6))
它来自一个自定义类,如下所示:
import UIKit
class bulletGroup: UIControl {
var radius: CGFloat = 3
var bulletSpacing: CGFloat = 10
var numberOfBullets = 5
var bulletColor = UIColor.blackColor()
override func drawRect(rect: CGRect) {
let ctx = UIGraphicsGetCurrentContext()
CGContextSetLineCap(ctx, kCGLineCapButt)
bulletColor.set()
for i in 1...numberOfBullets{
CGContextAddArc(ctx, CGFloat(Float(i) * Float(bulletSpacing)), self.frame.size.height/2, radius, 0, CGFloat(2 * M_PI), 0)
CGContextDrawPath(ctx, kCGPathStroke)
}
}
func fillCircle(circleNUmber: Int){
bulletColor.set()
UIGraphicsBeginImageContext(CGSize(width: 6, height: 6))
}
}
我对 Core Graphic 非常陌生。子类化 UIControl 时在 drawRect 函数之外创建上下文有什么问题吗?
编辑:确切的错误是:
CGContextSetFillColorWithColor:无效的上下文 0x0。这是一个严重的错误。此应用程序或它使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体下降。此通知是出于礼貌:请解决此问题。这将在即将到来的更新中成为致命错误。
CGContextSetStrokeColorWithColor:无效的上下文 0x0。这是一个严重的错误。此应用程序或它使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体下降。此通知是出于礼貌:请解决此问题。这将成为即将到来的更新中的致命错误。
【问题讨论】:
-
我之前就有过这个。不知道如何解决,所以我最终重构了我的所有代码:/ 如果有解决方案,我全神贯注
-
正如 LastMove 所说,如果你想重绘改变了某些属性的视图,你应该调用
setNeedsDisplay。顺便说一句,如果您打算使用UIGraphicsBeginImageContext(例如,您打算使用CoreGraphics 创建一个稍后将使用的图像),则必须通过调用UIGraphicsEndImageContext来平衡它.
标签: ios xcode swift core-graphics