• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Coordinate conversions in CALayer
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Coordinate conversions in CALayer


  • Subject: Re: Coordinate conversions in CALayer
  • From: Graham Cox <email@hidden>
  • Date: Thu, 24 Jan 2013 12:01:28 +1100

On 23/01/2013, at 5:41 PM, Graham Cox <email@hidden> 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@hidden)

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:

This email sent to email@hidden

  • Follow-Ups:
    • Re: Coordinate conversions in CALayer
      • From: Quincey Morris <email@hidden>
References: 
 >Coordinate conversions in CALayer (From: Graham Cox <email@hidden>)
 >Re: Coordinate conversions in CALayer (From: Andy Lee <email@hidden>)
 >Re: Coordinate conversions in CALayer (From: Graham Cox <email@hidden>)

  • Prev by Date: Re: New iTunes UI
  • Next by Date: Re: Coordinate conversions in CALayer
  • Previous by thread: Re: Coordinate conversions in CALayer
  • Next by thread: Re: Coordinate conversions in CALayer
  • Index(es):
    • Date
    • Thread