Как я могу повернуть UIImageView по отношению к любой точке (кроме ее центра)?

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

Ответ 1

Один из способов сделать это - изменить привязку базового слоя 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 градусов относительно точки привязки.

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

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

// Code for changes here

[CATransaction commit];