2011-02-03 2 views
0

Я рисую продолговатую форму «яйца» (на iOS) и хочу использовать ее как границу для частиц. Моя мысль состоит в том, чтобы использовать пути кривой, чтобы сделать UIView, а затем использовать hitTest:withEvent: или pointInside:withEvent: для обеспечения граничного столкновения.Можно ли вызвать pointInside: на неправильной форме?

Проблема, конечно, в том, что 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

Если вы делаете CGPathRef, вы можете использовать CGPathContainsPoint. Вы можете использовать тот же самый CGPathRef для визуализации в контексте. Вы также можете вызвать CGContextPathContainsPoint в контексте, содержащем путь, но в зависимости от того, когда вам нужно протестировать, у вас может не быть контекста. И еще одна альтернатива - селектор containsPoint на UIBezierPath.

+0

Возможно ли это на iOS? Мои 'CGPath' не рисуются как мои 'CGContextMoveToPoint' (и т. Д.). 'UIBezierPath' будет супер, но это тоже не на iOS. (Извините, обновление исходного вопроса, чтобы указать iOS сейчас) – buildsucceeded

+0

CGPathContainsPoint находится в iOS 2.0 и более поздних версиях, а UIBezierPath - в iOS 3.2 и более поздних версиях. –

+0

Спасибо за информацию об этом! – buildsucceeded

Смежные вопросы