2015-06-06 2 views
0

У меня есть UIView внутри UIScrollView, и я использую CAShapeLayer с несколькими подслоями для рисования на виду. В некоторых случаях слой не отображается, и я бы хотел прокрутить представление, чтобы слой стал видимым. Чтобы прокрутить, я использую:Прокрутите CAShapeLayer в поле зрения

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

Мне сложно определить, что такое офсет. Я попытался получить замкнутый прямоугольник, но всегда имеет начало координат (0,0).

Как я могу рассчитать положение слоя для использования в смещении?

UPDATE:

Это похоже на работу, чтобы получить охватывающий прямоугольник для все подуровня:

- (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; 
} 

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

ответ

0

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

+0

Спасибо, я попробую. Но остается вопрос: как получить замкнутый прямоугольник слоя относительно представления? – Koen

+0

См. Мое обновление выше, 'convertRect: toView:' не требуется с этим подходом. – Koen

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