我遇到的困境与this SO thread中描述的困境非常相似。我阅读了该主题的每个答案,但无法找到解决我问题的任何答案。我已将问题缩小到下面函数内的4行。 4行中的每一行都输出了几行错误,我在下面列出了所有这些错误(我已经删除了重复项)。
我尝试将[path closePath];
移到这4行以下,但它并没有改变任何东西。我还在第一行之前设置了一个断点,并逐行手动完成了这个功能,而这只是导致破坏的那4行。
对于这个问题似乎是一个趋势,一切都完全按照它应该呈现,但它会使控制台充斥着这些类型的消息。
非常感谢任何帮助,我很乐意提供更多信息和更新。
功能:
-(CAShapeLayer *)lineBetweenPoint:(CGPoint)start andPoint:(CGPoint)end {
//Draw the first circle
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:start radius:kLineEndRadius startAngle:0 endAngle:DEGREES_TO_RADIANS(360) clockwise:TRUE];
//Add the line
[path moveToPoint:start];
[path addLineToPoint:end];
[path moveToPoint:end];
//Draw the second circle
[path addArcWithCenter:end radius:kLineEndRadius startAngle:0 endAngle:DEGREES_TO_RADIANS(360) clockwise:TRUE];
//Close the path and set the coloring
[path closePath];
/*The following 4 lines cause problems*/
[[UIColor blueColor] setStroke]; /*CAUSES PROBLEM*/
[[UIColor blueColor] setFill]; /*CAUSES PROBLEM*/
[path stroke]; /*CAUSES PROBLEM*/
[path fill]; /*CAUSES PROBLEM*/
//Create a shape layer
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.path = [path CGPath];
shapeLayer.strokeColor = [kLineColor CGColor];
shapeLayer.lineWidth = kLineWidth;
shapeLayer.fillColor = [kLineColor CGColor];
//Return the layer
return shapeLayer;
}
日志输出:
:CGContextSetStrokeColorWithColor:无效的上下文0x0。这个 是一个严重的错误。此应用程序或其使用的库正在使用 一个无效的背景,从而有助于整体 系统稳定性和可靠性降低。这个通知是一个 礼貌:请解决这个问题。它将成为一个致命的错误 即将到来的更新。
:CGContextSetFillColorWithColor:无效的上下文0x0。这是 一个严重的错误。此应用程序或它使用的库正在使用 无效的上下文,从而导致整体退化 系统稳定性和可靠性。这个通知是礼貌的:拜托 解决这个问题。在即将到来的更新中,它将成为一个致命的错误。
:CGContextSaveGState:无效的上下文0x0。这是一个严肃的问题 错误。此应用程序或其使用的库使用无效 上下文,从而导致整体退化 系统稳定性和可靠性。这个通知是礼貌的:拜托 解决这个问题。在即将到来的更新中,它将成为一个致命的错误。
:CGContextSetLineWidth:无效的上下文0x0。这是一个严肃的问题 错误。此应用程序或其使用的库使用无效 上下文,从而导致整体退化 系统稳定性和可靠性。这个通知是礼貌的:拜托 解决这个问题。在即将到来的更新中,它将成为一个致命的错误。
:CGContextSetLineJoin:无效的上下文0x0。这是一个严肃的问题 错误。此应用程序或其使用的库使用无效 上下文,从而导致整体退化 系统稳定性和可靠性。这个通知是礼貌的:拜托 解决这个问题。在即将到来的更新中,它将成为一个致命的错误。
:CGContextSetLineCap:无效的上下文0x0。这是一个严肃的问题 错误。此应用程序或其使用的库使用无效 上下文,从而导致整体退化 系统稳定性和可靠性。这个通知是礼貌的:拜托 解决这个问题。在即将到来的更新中,它将成为一个致命的错误。
:CGContextSetMiterLimit:无效的上下文0x0。这是一个 严重错误。此应用程序或它使用的库正在使用 无效的上下文,从而导致整体退化 系统稳定性和可靠性。这个通知是礼貌的:拜托 解决这个问题。在即将到来的更新中,它将成为一个致命的错误。
:CGContextSetFlatness:无效的上下文0x0。这是一个严肃的问题 错误。此应用程序或其使用的库使用无效 上下文,从而导致整体退化 系统稳定性和可靠性。这个通知是礼貌的:拜托 解决这个问题。在即将到来的更新中,它将成为一个致命的错误。
:CGContextAddPath:无效的上下文0x0。这是一个严肃的问题 错误。此应用程序或其使用的库使用无效 上下文,从而导致整体退化 系统稳定性和可靠性。这个通知是礼貌的:拜托 解决这个问题。在即将到来的更新中,它将成为一个致命的错误。
:CGContextDrawPath:无效的上下文0x0。这是一个严肃的问题 错误。此应用程序或其使用的库使用无效 上下文,从而导致整体退化 系统稳定性和可靠性。这个通知是礼貌的:拜托 解决这个问题。在即将到来的更新中,它将成为一个致命的错误。
:CGContextRestoreGState:无效的上下文0x0。这是一个 严重错误。此应用程序或它使用的库正在使用 无效的上下文,从而导致整体退化 系统稳定性和可靠性。这个通知是礼貌的:拜托 解决这个问题。在即将到来的更新中,它将成为一个致命的错误。
答案 0 :(得分:24)
您正在混合您的API。当您使用CAShapeLayer时,您实际上并不自己进行绘图,只需配置对象并让CoreAnimation渲染服务器执行绘图。使用CoreGraphics,您可以在进程中绘制CGContextRef。你的问题是需要创建CGContextRef(在[UIView drawRect:]中自动发生)。你可以使用UIGraphicsBeginImageContext中的一个来做...通常,但在这里你实际上并不想要CG,你想要CA.因此,只需省略这四行,并确保您的CAShapeLayer配置正确,您就会很好。