Масштабирование с помощью CGAffineTransform и установка привязки
Если я правильно понимаю масштабирование 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)?
Ответы
Ответ 1
(а)
Масштабировать, а затем перевести?
Что-то вроде:
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;
Ответ 2
Сначала #import <QuartzCore/QuartzCore.h>
, а затем установите опорные точки вашего представления:
[[self layer] setAnchorPoint:CGPointMake(0, 0)];