是否有可能调用pointInside:在不规则的形状上?

时间:2011-02-03 14:30:55

标签: iphone objective-c objective-c++ openframeworks

我正在画一个椭圆形的“蛋”形状(在iOS上),并希望将其用作粒子的边界。我的想法是使用曲线路径制作UIView,然后使用hitTest:withEvent:pointInside:withEvent:来强制执行边界碰撞。

问题当然是UIView总是矩形的。你会如何检查一个点是否在这样的不规则形状内?

- (void)drawRect:(CGRect)rect {
int w = rect.size.width;
int h = rect.size.height;
CGContextBeginPath(context);
CGContextMoveToPoint(context, w/2, h/5);
CGContextAddCurveToPoint(context, w*0.1, h/4.3, w*0.1, h*0.82, w/2, h*0.8);
CGContextAddCurveToPoint(context, w*0.9, h*0.82, w*0.9, h/4.3, w/2, h*0.2);

我正在使用 openFrameworks ,这是值得的。这段代码只是Obj-C,但我对那里的C ++ / obj-C ++解决方案持开放态度。

2 个答案:

答案 0 :(得分:2)

如果您制作CGPathRef,则可以使用CGPathContainsPoint。您可以使用相同的CGPathRef渲染到上下文中。您也可以在包含路径的上下文中调用CGContextPathContainsPoint,但根据您需要测试的时间,您可能没有上下文。另一种选择是containsPoint上的UIBezierPath选择器。

答案 1 :(得分:0)

如果你想从头编写代码,http://www.softsurfer.com/Archive/algorithm_0103/algorithm_0103.htm会通过几种不同的算法来处理任意多边形。