Здесь есть две задачи: первая - определить, какая область была затронута, вторая - заполнить эту область. Оба требуют, чтобы вы вычислили точки пересечения окружности вышеупомянутого изображения, используя тригонометрию, и знали их положения.
Простым решением для обнаружения области касания было бы проверить, содержится ли касание в каком-либо из кругов, это легко вычислить, рассчитав расстояние до точки касания от центра окружностей, если оно меньше радиуса это внутри круга. Если он находится внутри более чем одного круга, вы знаете, что он принадлежит этой области пересечения. Это если внутри нет окружностей, но компонент x находится между центром левого круга и правым кругом, он должен быть в области между всеми кругами. В противном случае точка касания должна находиться за пределами всех окружностей.
Чтобы заполнить различные разделы изображения выше, вы можете создать пути, содержащие области, которые вам нужно заполнить, и заполните их CGContextFillPath
. Как то так:
// draw a path to contain the fill region
CGContextBeginPath(ctx);
CGContextMoveToPoint(ctx, startx, starty);
CGContextAddArcToPoint(ctx, ...);
// lots of other CGContextAddArcToPoint or AddLineToPoint method calls here to define the clip region
// close the clip path
CGContextClosePath(ctx);
// now you can fill the region
CGContextFillPath(ctx);
Вы можете повторить это для любого количества путей. Вы можете рассчитать траектории дуг для использования из точек пересечения окружности и радиусов.