Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Scale with CGAffineTransform and set the anchor

If I understand correctly scaling a UIView with CGAffineTransform anchors the transformation to its center.

In particular:

self.frame = CGRectMake(0,0,100,100); self.transform = CGAffineTransformMakeScale(2, 2); NSLog(@"%f;%f;%f;%f", self.frame.origin.x, self.frame.origin.y, self.frame.size.width, self.frame.size.height);  

Prints:

-50;-50;200;200 

How do you create a CGAffineTransform scale that uses a specific anchor point (say 0;0)?

like image 848
hpique Avatar asked Jan 06 '12 12:01

hpique


2 Answers

(a)

Scale and then translate?

Something like :

CGAffineTransform t = CGAffineTransformMakeScale(2, 2); t = CGAffineTransformTranslate(t, width/2, height/2); self.transform = t; 

(b)

Set the anchor point (which is probably what you want really)

[self layer].anchorPoint = CGPointMake(0.0f, 0.0f); self.transform = CGAffineTransformMakeScale(2, 2); 

(c)

Set the center again to make sure it's in the same place?

CGPoint center = self.center; self.transform = CGAffineTransformMakeScale(2, 2); self.center = center; 
like image 198
deanWombourne Avatar answered Sep 30 '22 06:09

deanWombourne


Firstly #import <QuartzCore/QuartzCore.h> and then set the anchor points of your view:

   [[self layer] setAnchorPoint:CGPointMake(0, 0)]; 
like image 40
Mudit Bajpai Avatar answered Sep 30 '22 05:09

Mudit Bajpai