web-dev-qa-db-fra.com

Mettre à l'échelle avec CGAffineTransform et définir l'ancre

Si je comprends bien la mise à l'échelle d'un UIView avec CGAffineTransform ancre la transformation en son centre.

En particulier:

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); 

Tirages:

-50;-50;200;200

Comment créez-vous une échelle CGAffineTransform qui utilise un point d'ancrage spécifique (disons 0; 0)?

30
hpique

(une)

Mettre à l'échelle puis traduire?

Quelque chose comme :

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

b)

Définissez le point d'ancrage (qui est probablement ce que vous voulez vraiment)

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

(c)

Réglez à nouveau le centre pour vous assurer qu'il est au même endroit?

CGPoint center = self.center;
self.transform = CGAffineTransformMakeScale(2, 2);
self.center = center;
67
deanWombourne

Tout d'abord #import <QuartzCore/QuartzCore.h> puis définissez les points d'ancrage de votre vue:

   [[self layer] setAnchorPoint:CGPointMake(0, 0)];
4
Mudit Bajpai