Масштаб с помощью CGAffineTransform и установите привязку - PullRequest
30 голосов
/ 06 января 2012

Если я правильно понимаю, масштабирование UIView с помощью CGAffineTransform привязывает преобразование к его центру.

В частности:

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

Отпечатки:

-50;-50;200;200

Как создать шкалу CGAffineTransform, в которой используется определенная точка привязки (скажем, 0; 0)?

Ответы [ 2 ]

67 голосов
/ 06 января 2012

(а)

Масштабировать, а затем перевести?

Что-то вроде:

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

(б)

Установите опорную точку (что, вероятно, действительно нужно)

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

(с)

Установить центр еще раз, чтобы убедиться, что он находится в том же месте?

CGPoint center = self.center;
self.transform = CGAffineTransformMakeScale(2, 2);
self.center = center;
4 голосов
/ 06 января 2012

Сначала #import <QuartzCore/QuartzCore.h>, а затем установите опорные точки вашего обзора:

   [[self layer] setAnchorPoint:CGPointMake(0, 0)];
...