I'm drawing an oblong 'egg' shape (on iOS), and want to use it as a boundary for particles. My thought is to use the curve paths to make a UIView
and then use hitTest:withEvent:
or pointInside:withEvent:
to enforce boundary collision.
The problem is, of course, that UIView
is always rectangular. How would you go about checking to see if a point is inside an irregular shape like this?
- (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);
I'm using openFrameworks, for what that's worth. This code is just Obj-C but I'm open to any C++/obj-C++ solutions out there.
If you make a CGPathRef
you can use CGPathContainsPoint
. You can use that same CGPathRef
to render into the context. You could also call CGContextPathContainsPoint
on the context containing the path, but depending on when you need to test you might not have a context. And another alternative is the containsPoint
selector on UIBezierPath
.