I was going to answer this yesterday on a similar question but it disappeared.
You can create one path and draw everything as one SKShapeNode
using CGPathAddPath
to merge the paths as you go.
Here's an example :
SKEffectNode *effectNode = [[SKEffectNode alloc]init];
SKShapeNode *shape = [[SKShapeNode alloc] init];
CGMutablePathRef myPath = CGPathCreateMutable();
CGPathAddArc(myPath, NULL, 0,0, 15, 0, M_PI*2, YES);
CGMutablePathRef pathTwo = CGPathCreateMutable();
CGPathAddArc(pathTwo, NULL, 50,0, 15, 0, M_PI*2, YES);
CGPathAddPath(myPath, NULL, pathTwo);
CGMutablePathRef pathThree = CGPathCreateMutable();
CGPathAddArc(pathThree, NULL, 100,0, 15, 0, M_PI*2, YES);
CGPathAddPath(myPath, NULL, pathThree);
shape.path = myPath;
[effectNode addChild:shape];
[self addChild:effectNode];
effectNode.shouldRasterize = YES; // if you don't rasterize it's horrifically slow.
This was just an example of how to merge the different paths to create one SKShapeNode
that has all visual elements you are seeking. You'll need to apply this concept to your code.
I added the resulting SKShapeNode
to an SKEffectNode
so that I could utilize the shouldRasterize
property to cache the shape, otherwise your framerate will be horrible.