On 23/01/2013, at 5:41 PM, Graham Cox <[email protected]> wrote:
> To create a transform that supposedly will transform from the superlayer TO
> the layer, and I then invert it to go back the other way. It works in the
> simple case, but a rotation transform upsets things. I've tried pretty much
> every combination of ordering different things in constructing the transform
> but this is the "best" result I get. Still wrong though. Funny, every time I
> think I have transforms figured out something turns up to show me I don't.
Boiling down my problem to its bare essentials, why are these two bits of code
not equivalent?
CGPoint anch = layer.anchorPoint;
CGRect br = layer.bounds;
CGPoint pos = layer.position;
CGContextTranslateCTM( ctx, pos.x, pos.y );
CGContextConcatCTM( ctx, layer.transform );
CGContextTranslateCTM(ctx, -(br.origin.x + anch.x * br.size.width),
-(br.origin.y + anch.y * br.size.height));
The above works correctly, but below, which I thought should do the same, does
not, if the layer.transform property is not the identity matrix:
CGPoint anch = layer.anchorPoint;
CGRect br = layer.bounds;
CGPoint pos = layer.position;
CGAffineTransform tfm = CGAffineTransformMakeTranslation( pos.x, pos.y
);
tfm = CGAffineTransformConcat( tfm, layer.transform );
tfm = CGAffineTransformTranslate( tfm, -(br.origin.x + anch.x *
br.size.width), -(br.origin.y + anch.y * br.size.height));
CGContextConcatCTM( ctx, tfm );
In the second case I've tried every combination of ordering the different
statements that build the transform, and the sign of the translations, but
nothing I have tried makes the second code work identically to the first. I'm
missing something obvious but I'm not grokking it. I need the second case to
work because it is needed in other situations where I have no context - e.g.
just performing transformation calculations between a layer and its superlayer.
Please someone help, this is driving me bats.
--Graham
_______________________________________________
Cocoa-dev mailing list ([email protected])
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to [email protected]