Как я могу повернуть UIImageView относительно любой точки (кроме ее центра)? - PullRequest
10 голосов
/ 08 мая 2009

По умолчанию UIImageView будет вращаться только вокруг своего центра. Как заставить его вращаться вокруг любой другой точки изображения?

1 Ответ

18 голосов
/ 08 мая 2009

Один из способов сделать это - изменить точку привязки нижележащего слоя UIImageView и вращаться вокруг нее. Вы можете изменить точку вращения, используя что-то вроде следующего:

imageView.layer.anchorPoint = CGPointMake(0.25, 0.25);

anchorPoint определяется в терминах относительных координат в слое. То есть (0,0) - это верхний левый угол слоя (на iPhone, где слои UIView перевернули координаты Y), а (1,1) - правый нижний.

Перемещение anchorPoint может привести к смещению вашего изображения, поэтому вам, возможно, придется впоследствии отрегулировать его положение.

Чтобы повернуть слой изображения вокруг этой новой точки привязки, вы можете изменить структуру CATransform3D для слоя, используя что-то вроде следующего:

CATransform3D rotatedTransform = imageView.layer.transform;
rotatedTransform = CATransform3DRotate(rotatedTransform, 60.0 * M_PI / 180.0, 0.0f, 0.0f, 1.0f);
imageView.layer.transform = rotatedTransform;

Этот пример делает инкрементный поворот 60 градусов относительно опорной точки.

Все изменения слоя по умолчанию анимированы. Вы можете отключить эту анимацию, заключив свои изменения в эти свойства в транзакцию CAT следующим образом:

[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];    

// Code for changes here

[CATransaction commit];
...