Search code examples
iphonecore-animationcore-graphicscgaffinetransformcatiledlayer

Convert CGPoint between iPhone & CA planes


I have a UIView subclass that I'm drawing a PDF onto (using a CATiledLayer). I also need to draw on a specific region of that PDF, however the coordinate plane of the CATiledLayer when using CG to draw is way screwy.

See image: alt text

I have a point (200,200), that I need to convert to the CATiledLayer's coordinate system, which is the 2nd plane shown above. I've tried doing this with some transforms, but nothing seems to work.

Thanks!


Solution

  • Here is what I had to do (using the example points/plane above):

    //rotatation origin
    CGPoint rotateOrigin = CGPointMake(0,0);
    //rotatation transform
    CGAffineTransform translateTransform = CGAffineTransformMakeTranslation(rotateOrigin.x, rotateOrigin.y);
    //rotate the plane 90 degrees
    float radians = 90 * (M_PI / 180);
    CGAffineTransform rotationTransform = CGAffineTransformMakeRotation(radians);   CGAffineTransform customRotation = CGAffineTransformConcat(CGAffineTransformConcat( CGAffineTransformInvert(translateTransform), rotationTransform), translateTransform);
    
    CGAffineTransform m1 =  CGAffineTransformIdentity;
    CGPoint startPoint = CGPointApplyAffineTransform(CGPointMake(200,200),m1);   
    //rotated point
    CGPoint rotatedPoint = CGPointApplyAffineTransform(startPoint, customRotation);
    //final rotated point- after adjusting for the rotation
    rotatedPoint = CGPointApplyAffineTransform(rotatedPoint, CGAffineTransformMakeTranslation(500,-500));