Прокрутите 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;
}

Не стесняйтесь комментировать, если есть лучший и более простой способ сделать это.


person koen    schedule 06.06.2015    source источник


Ответы (1)


Используйте метод convertRect:toView: для преобразования фрейма в систему координат представления прокрутки, и полученный прямоугольник должен дать вам необходимое смещение содержимого.

person rounak    schedule 06.06.2015
comment
Спасибо, попробую. Но остается вопрос, как мне получить охватывающий прямоугольник слоя относительно представления? - person koen; 06.06.2015
comment
См. мое обновление выше, convertRect:toView: не требуется при таком подходе. - person koen; 06.06.2015