0

我添加了这个方法来检查 aCGPoint是否在 aUIBezierPath

- (BOOL)isPointInPath:(CGPoint)point inShape:(BOOL)inShape {
CGContextRef context = UIGraphicsGetCurrentContext();
CGPathRef cgPath = path.CGPath;

CGPathDrawingMode mode = kCGPathStroke;
if (inShape) mode = kCGPathFill;

CGContextSaveGState(context);
CGContextAddPath(context, cgPath);

bool isHit = CGContextPathContainsPoint(context, point, mode);
CGContextRestoreGState(context);

return isHit;
}

pathUIBezierPath在头文件中声明的。

当我在方法之外调用此方法时,drawRect:我收到以下 4 条错误消息:

CGContextSaveGState: invalid context 0x0
CGContextAddPath: invalid context 0x0
CGContextPathContainsPoint: invalid context 0x0
CGContextRestoreGState: invalid context 0x0

但是当我drawRect:在绘图内部和之后调用它时,它可以工作。

为什么它在外面不起作用drawRect:?对我来说完全是无稽之谈。

4

2 回答 2

0

我自己修复了它,我意识到CGContext使用起来很混乱,所以我使用了它CGPath并使用CGPathContainsPoint了它。

于 2013-08-11T21:34:25.797 回答
0

外部没有当前图形上下文drawRect:(除非您创建一个),因此 contextNULL.

但是您不需要图形上下文来检查点是否在 a 给出的形状内UIBezierPath,您可以使用containsPoint:method.

于 2013-08-11T21:05:17.187 回答