Почему представление меняет положение при его вращении с помощью CGAffineTransformMakeRotation
У меня есть следующая супер простая анимация, я в основном поворачиваю представление 2 радия из его исходного угла/центра, он вращается отлично, мое единственное недоразумение - это то, почему представление перемещается из его исходного положения, когда происходит поворот.
[UIView animateWithDuration:1.0 animations:^{
self.someView.transform = CGAffineTransformMakeRotation( 2 );
}];
Почему представление перемещается при повороте с помощью кода выше?
![enter image description here]()
В настоящее время я пытаюсь определить информацию в CGAffineTransform Reference.
Понимание якоря point.
Я нашел эти потоки, но не нашел конкретного ответа.
Почему вращение imageView, оно меняет позицию?
Спасибо большое
Ответы
Ответ 1
Я добавляю еще один ответ из-за запроса @fs_tigre. Проблема заключается в автоматических макетах в вашем файле xib, к сожалению, неизвестно, почему это влияет на преобразование.
Теперь вот шаги, которые я предпринял для решения проблемы:
1- сначала вам нужно избавиться от своего макета (да, вам нужно)
снимите флажок Использовать автоспуск
![uncheck Use Autolayout]()
2- удалите все ограничения и авторезистирующие маски для вашего представления, которое будет повернуто, как на скриншоте
(Здесь у меня есть моя синяя коробка, см. правую авторезистировку, ничего не выбрано)
![enter image description here]()
Я сделал некоторые изменения для вашего кода вращения
self.someView.layer.anchorPoint = CGPointMake(0.5, 0.5);
// one degree = pi/180. so...
// rotate by 90
CGFloat radians = (M_PI/180) * 90;
[UIView animateWithDuration:1.0 animations:^{
self.someView.transform = CGAffineTransformRotate(self.someView.transform, radians);
}];
Нажмите rotate
и увидите волшебство:)
Ответ 2
Вам нужно установить опорную точку вашего представления для поворота.
self.somview.layer.anchorPoint = CGPointMake(0.5, 0.5);
Затем запустите вращение.
Из документации Apple
@property(nonatomic) CGAffineTransform transform
Изменения в этом свойство может быть анимировано. Используйте startAnimations: context: class метод для начала и метод класса commitAnimations для завершения блок анимации. По умолчанию используется любое значение центра (или опорная точка при изменении) Ссылка: https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CALayer_class/Introduction/Introduction.html#//apple_ref/occ/instp/CALayer/anchorPoint
![enter image description here]()
изображение отсюда http://www.raywenderlich.com/9864/how-to-create-a-rotating-wheel-control-with-uikit
- Как вы видите, опорная точка - это точка со значением от 0.0 до 1.0 для X и Y
когда вы вращаете вращение вокруг этих точек
ПРИМЕЧАНИЕ. Вам нужно импортировать QuartzCore
Ответ 3
"Якорь" CGAffineTransformMakeRotation
- это X, Y представления. Вы можете попробовать следующее:
CGPoint center = self.someView.center;
[UIView animateWithDuration:1.0 animations:^{
self.someView.transform = CGAffineTransformMakeRotation( 2 );
self.someView.center = center;
}];