точка обновления после преобразования - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь изменить позицию просмотра, используя CGAffineTransform, но оператор преобразования не влияет на нее.

Например, давайте назовем представление, которое перемещается movingView:

В начале movingView находится в точке CGPoint(x: 100, y: 100) тогда я двигаюсь movingView по этому коду:

movingView.transform = CGAffineTransform(translationX: 100, y: 300)

Теперь, если я сделаю: print(movingView.layer.position), я все равно получу

CGPoint (x: 100, y: 100)

вместо

CGPoint (x: 200, y: 400)

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

На самом деле Что меняется, так это рамка просмотра, если представление добавляется в SuperView. Проверить: movingView.frame.origin.

Преобразование CALayer из UIView уже изменилось:

CGPoint.init (x: movingView.layer.transform.m41, y: movingView.layer.transform.m42)

Таким образом, преобразование представления основано на преобразовании CALayer.

0 голосов
/ 05 ноября 2018

Применение преобразования к виду (или слою) не обновляет его центральное положение (или положение). Он изменяет способ и место отображения вида (или слоя) на экране, но не значения его свойств center, (или position) или bounds.

Если вы хотите знать, как на точку влияет перевод, то вы можете вычислить новую точку, применив к ней преобразование:

let point = CGPoint(x: 100, y: 200)
let transform = CGAffineTransform(translationX: 20, y: 40)
let transformedPoint = point.applying(transform) // x: 120, y: 240
...