Базовая анимация, вращающая слой вокруг произвольной точки - PullRequest
3 голосов
/ 14 октября 2008

Как я могу вращать слой, используя Core Animation вокруг произвольной точки? (В моем случае точка, которая не находится внутри слоя, который я хочу повернуть)

Я предпочитаю делать это, не меняя точку привязки, потому что, если я не получаю что-то неправильно каждый раз, когда я изменить точку привязки также изменяет положение слоя.

Я попробовал что-то подобное, но это не сработало:

[UIImageView beginAnimations:nil context:nil];
CATransform3D rotationTransform = CATransform3DIdentity;
rotationTransform = CATransform3DTranslate(rotationTransform, 0.0, -100.0, 0.0);
rotationTransform = CATransform3DRotate(rotationTransform, DegreesToRadians(180),
                        0.0, 0.0, 1.0);
rotationTransform = CATransform3DTranslate(rotationTransform, 0.0, 100.0, 0.0)
shape1.layer.transform = rotationTransform;
[UIImageView commitAnimations];

Похоже, что ось вращения движется во время вращения.

Ответы [ 4 ]

3 голосов
/ 05 февраля 2009

Ваше решение в порядке, но «ожидаемый способ» - использовать опорную точку.

Он двигается вокруг, когда вы установили точку привязки, поскольку позиция крепятся к опорной точке, то есть установки множества позиций, где anchorPoint находится в коорде системы superlayer в.

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

Удачи!

2 голосов
/ 14 октября 2008

Вы можете сделать это, добавив несколько преобразований:

  1. перевести слой с помощью (-rotCenterX, rotCenterY)
  2. повернуть слой
  3. перевести слой с помощью (rotCenterX, rotCenterY)
1 голос
/ 16 апреля 2009

Ваше первоначальное решение не подходит, поскольку перевод анимирован так же, как вращение. Таким образом, пользовательский центр вашего вращения движется во время вращения. На самом деле вам нужен перевод без анимации и ротация с анимацией на основе этого неанимированного перевода. Дело в том, что в настоящее время у меня точно такая же проблема, и я пока не могу найти решение. Сейчас я смотрю на CATransaction, надеясь, что это может стать ключом ...

0 голосов
/ 20 октября 2008

Я наконец сделал это, создав новый больший слой с центром в моей оси вращения и установив слой, который я хочу повернуть, как его подслой.

Затем я поворачиваю больший слой вместо подслоя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...