1
votes

I have a CATiledLayer inside a UIScrollView and all is working fine. Now I want to add support for showing different tiles for three levels of zooming.

I have set levelsOfDetail to 3 and my tile size is 300 x 300. This means I need to provide three sets of tiles (I'm supplying PNGs) to cover: 300 x 300, 600 x 600 and 1200 x 1200.

My problem is that inside "(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx" I cannot work out which levelOfDetail is currently being drawn. I can retrieve the bounds currently required by using CGContextGetClipBoundingBox and usually this requests a rect for one of the above sizes, but at layer edges the tiles are usually smaller and therefore this isn't a good method.

Basically, if I have set levelsOfDetail to 3, how do I find out if drawLayer is requesting level 1, 2 or 3 when it's called?

Thanks,

Russell.

1
Were you able to fix this issue? I am facing same issue since long time...iOSDev

1 Answers

2
votes

I worked this out eventually.

Get the CTM fom the graphics context and look at its scale (e.g. the a element).

    CGAffineTransform transform = CGContextGetCTM (ctx);

    transform.a holds the zoom