Here's a picture that I think quickly illustrates the issue. You need only download the example from git hub, go to the curved scatter plot example and tap on a point to get the point annotations to appear, then simply scroll the graph over to move the points off the graph.
So normally we would want annotations floating above everything but for times when we set the axisContraints, in this case we set them to:
x.axisConstraints = [CPTConstraints constraintWithRelativeOffset:0.5];
y.axisConstraints = [CPTConstraints constraintWithLowerOffset:0.0];
We want the annotations, that we add, to be drawn the same as the gridlines, plot lines, and plot points.
I've tried the following as a test, to see what would happen and this does NOT help.
// reorder layer
[annotationHostLayer insertSublayer:annotation.contentLayer atIndex:0];
[annotationHostLayer setNeedsDisplay];
It'll draw the gridlines, axes over the annotations but the annotations still float off the graph.
I'm using the sample code from coreplot, here's github link and the chart I've been experimenting with is the "Curved Scatter Plot" graph.
Update: I've been fooling around with maskToBorder and maskToBounds for the plotArea. It seems that masking to bounds would work if the axis were drawn within the layers bounds, which it is not. This clips the yaxis. I've looked around for other clipping code but to no avail.
Hide the content layers of any annotations that fall outside the desired area. Use a plot space delegate to monitor changes to the plot space and show or hide annotations as needed.