我在 drawInContext 中遇到无效上下文错误
苹果说我们不能在UIImageView中使用drawRec:。所以我决定使用 CALayer 来完成这项工作,并将图层添加到 UIImageView.layer 中。 我创建了一个名为MyCALayer的类扩展了CALayer类,并用以下内容覆盖了drawInContex:方法:
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context,5.0f);
CGContextSetStrokeColorWithColor(context,[UIColor yellowColor].CGColor);
CGRect newRec = CGRectMake(55,55,55,55);
CGContextAddRect(context,newRec);
CGContextDrawPath(context,kCGPathStroke);
并且我在touchesBegan:withEvent中使用了setNeedsDisplay来使drawInContext:可以被调用。
每个使用上下文的逻辑(例如 CGContextSetLineWidth(context,5.0f);)都会得到一个空句柄警告代码,例如:
Error:CGContextSetWidth: invalid context 0x0
那么,setNeedsDisplay 不是创建了我需要的上下文吗?
For apple said that we can't use drawRec: in a UIImageView. so I decide to use CALayer to do the work, and add the layer to the UIImageView.layer.
I made a Class named MyCALayer extends the CALayer class, and I overwrite the drawInContex: method with:
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context,5.0f);
CGContextSetStrokeColorWithColor(context,[UIColor yellowColor].CGColor);
CGRect newRec = CGRectMake(55,55,55,55);
CGContextAddRect(context,newRec);
CGContextDrawPath(context,kCGPathStroke);
And I used the setNeedsDisplay in touchesBegan:withEvent to make the drawInContext: could be called.
Each logic which uses context (such as CGContextSetLineWidth(context,5.0f);) get a null- handle warning code like:
Error:CGContextSetWidth: invalid context 0x0
So, Wasn't the setNeedsDisplay create the context I needed?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您应该绘制作为参数传递给
drawInContext:
方法的上下文。无需调用UIGraphicsGetCurrentContext()
。You are supposed to draw to the context that is passed as an argument to the
drawInContext:
method. There is no need to callUIGraphicsGetCurrentContext()
.