将CAShapeLayer滚动到视图中

时间:2015-06-06 17:15:54

标签: ios objective-c uiview uiscrollview cashapelayer

我在UIView内有一个UIScrollView,我正在使用CAShapeLayer并在视图中绘制多个子图层。在某些情况下,图层不可见,我想滚动视图,以便图层变得可见。使用以下方式滚动我:

[self.scrollView setContentOffset: CGPointMake(0, offset) animated: NO];

我很难弄清楚偏移是什么。我试图获得封闭的矩形,但它的起源始终为(0,0)。

如何计算要在偏移中使用的图层的位置?

更新

这似乎可以获得所有子图层的封闭矩形:

- (CGRect) enclosingLayerRect
{
    CGRect rect = CGRectZero;

    if (self.sublayers.count)
    {
        CAShapeLayer *layer = self.sublayers[0]; // need to get the first one, otherwise the origin will be (0,0)

        rect =  CGPathGetBoundingBox(layer.path);

        for (CAShapeLayer *layer in self.sublayers)
        {
            CGRect layerRect = CGPathGetBoundingBox(layer.path);
            rect = CGRectUnion(rect, layerRect);
        }
    }

    return rect;
}

如果有更好,更简单的方法,请随意发表评论。

1 个答案:

答案 0 :(得分:0)

使用convertRect:toView:方法将框架转换为滚动视图的坐标系,生成的rect应该为您提供所需的内容偏移。