如何从CALayers中调整UIView的大小?

时间:2011-11-16 05:15:16

标签: iphone calayer

我有一个带有CALayers层次结构的UIView。

我正在使用图像创建图层,因此在完成图层创建之前,我不知道UIView的最终尺寸。

我如何找到允许触摸所有图层的最终UIView尺寸?

由于图层可能是矩形的,然后旋转,因此它会进一步伸出,这也很复杂。由于它的仿射变换,我将无法使用图层的帧大小。

我确实有一个解决方案可以使一个UIView的大小与屏幕相同,我可以将所有的CALayers添加到这个UIView中,但我会有几组这些层次结构,我更喜欢在单独的UIViews中我可以使用UIView手势来翻译/缩放/旋转。

1 个答案:

答案 0 :(得分:1)

您可以使用CGMutablePathRef。然后循环遍历CALayer中的所有view.layer.sublayers - s:

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

矩形偏移以使其中心位于CGPointZero。这里的transform是你的图层(或比例)的旋转加上翻译到图层的位置。即:

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

最后:

view.bounds = CGPathGetBoundingBox(path);

界限现在很小,并且包含所有图层。