我正在画一个椭圆形的“蛋”形状(在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 ++解决方案持开放态度。
答案 0 :(得分:2)
如果您制作CGPathRef
,则可以使用CGPathContainsPoint
。您可以使用相同的CGPathRef
渲染到上下文中。您也可以在包含路径的上下文中调用CGContextPathContainsPoint
,但根据您需要测试的时间,您可能没有上下文。另一种选择是containsPoint
上的UIBezierPath
选择器。
答案 1 :(得分:0)
如果你想从头编写代码,http://www.softsurfer.com/Archive/algorithm_0103/algorithm_0103.htm会通过几种不同的算法来处理任意多边形。