Как определить размер UIView по его CALayers? - PullRequest
0 голосов
/ 16 ноября 2011

У меня есть UIView с иерархией CALayers.

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

Как узнать окончательный размер UIView, которыйпозволяет прикосновения ко всем слоям?

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

У меня есть решение, которое делает один UIView размером экрана, и я могу добавить все свои CALayers кэтот UIView, но у меня будет несколько наборов этих иерархий слоев, которые я предпочел бы иметь в отдельных UIViews, чтобы я мог использовать жесты UIView для перевода / масштабирования / вращения.

1 Ответ

1 голос
/ 22 ноября 2011

Вы можете использовать CGMutablePathRef для этого. А затем переберите все CALayer -s в view.layer.sublayers:

CGPathAddRect(path,
              &transform,
              CGRectOffset(i.bounds,
                           -CGRectGetMidX(i.bounds), 
                           -CGRectGetMidY(i.bounds)));

Прямоугольник смещен, чтобы его центр находился в CGPointZero. transform - это вращение вашего слоя (или масштаба) плюс перевод в положение слоя. I.e.:

CGAffineTransform transform =
    CGAffineTransformConcat(CATransform3DGetAffineTransform(i.transform),
                            CGAffineTransformMakeTranslation(i.position.x,
                                                             i.position.y));

Наконец:

view.bounds = CGPathGetBoundingBox(path);

Границы теперь минимальны и охватывают все слои.

...