Как определяются эти регионы? Если вы можете получить данные точек, создайте CGPath, используя:
CGPathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path,null,xpoints[0],ypoints[0])
for (int i = 1; i < numpoints; ++i) {
CGPathAddLineToPoint(path,null,xpoints[i],ypoints[i]);
}
CGPathCloseSubpath(path);
Затем, когда пользователь касается каждой области, проверьте, содержит ли она точку касания:
if (CGPathContainsPoint(path,null,touchPoint,false)) ...
И не забудьте отпустить, когда закончите с регионами:
CGPathRelease(path);
Обратите внимание, что вы можете создать несколько отдельных подпутей в одном CGPathRef, и он будет проверять все подпути, когда вы проверяете наличие.
Если хотите, вы можете попробовать использовать дуги или кривые, чтобы получить правильные линии, но это то, с чем я не слишком знаком.