2016-08-10 2 views
0

Недавно я работал с CGAffineTransform и CATransform3D на представлениях и слоях. Когда я применяю преобразование на уровне уровня и особенно на уровне представления, не следует автоматически обновлять фреймы связанных представлений. Например, рассмотрите следующий макет |H:[ViewA]-[ViewB]|. Если я применил преобразование только ViewA.CGAffineTransform не влияет на автозапуск

//We can either 
    ViewA.transform = CGAffineTransformMakeScale(1.5, 1.5) 
    ViewA.layer.transform = CATransform3DMakeScale(1.5, 1.5, 1.0) 

не должен ViewB автонастройки это Rect так ViewA высота, ширина или положение изменилось после трансформации. Я также попытался назвать

self.view.layoutIfNeeded() 

ответ

1

Трансформация не влияет на Frame или Bounds из вида или кадр будет находиться в неопределенном состоянии. Чтобы проиллюстрировать это: изображение у вас есть прямоугольное представление с рамкой из X: 10, Y: 10, W: 100, H: 100, и вы поворачиваете его на 45 градусов ... каков должен быть кадр?

От Docs компании Apple о transformation:

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

Это объясняет, почему AutoLayout не выполняет никаких обновлений.

+0

спасибо, что я пропустил это в документации .. На самом деле я регистрировал фрейм, и я получал масштабированный результат, поэтому я запутался в том, что кадр выполняется, но не связанные с ним взгляды. Любопытно, есть ли способ превратить преобразование в личность и применить эту разницу к кадру. – Azerue

Смежные вопросы