Синхронизированная иерархия UIViews и CALayers

У меня есть следующая иерархия: просмотр scrollview(с включенной прокруткой и масштабированием), просмотр контейнера, viewview (с картой), представления кнопок для панелей навигации

Над представлением изображения я должен поставить интересную точку (в зависимости от категории, которую выбирает пользователь): Проблемы: если я прикреплю их к представлению контейнера, они получат правильную позицию очень легко, но при увеличении они будут увеличивать с изображением, и они должны иметь одинаковый размер (1), если я присоединяю их к представлению прокрутки, я ничего не вижу.. Если я прикрепляю их к основному виду, у меня возникают две проблемы: 1 найти их положение иерархии в между просмотром прокрутки и просмотром кнопок и т. д. (они располагаются в верхней части приложения и должны располагаться только над картой, но под панелями управления, кнопками и т. д. 2 для согласования с масштабированием и прокрутки - выполняется с помощью convertPoint:toView Если я добавляю представление (одноуровневое представление контейнера в представлении прокрутки), которое они отображают нормально, но у меня нет на них пользовательского ввода (они не получают прикосновений). Если я преобразовываю это дочернее подпредставление в CALayer, я не получаю подслои (POI)) к показу.

(1) Я попытался создать подкласс просмотра контейнера и переопределить setTransform, применив CGAffineTransform invertedTransform = CGAffineTransformInvert(transform); но у меня были проблемы с передачей массива со ссылками на него

Что бы вы порекомендовали сделать в этом случае? Большое спасибо!

С.

1 ответ

Я наконец-то добавил подпредставления в containerView и подклассифицировал его:

- (void)setTransform:(CGAffineTransform)transform
{
    [super setTransform:transform];

    CGAffineTransform invertedTransform = CGAffineTransformInvert(transform);
    for (UIView *view in self.subviews)
    {
        if ([view isKindOfClass:[MarkerClass class]]) {
            [view setTransform:invertedTransform];
        }
    }
}

Единственная проблема заключается в том, что до того, как я увеличу размер контейнера, на экране появится версия маркеров короткого размера.

Через некоторое время я обнаружил, что переопределил бы и addSubview, чтобы получить начальное преобразование следующим образом:

-(void)addSubview:(UIView *)view {
    [super addSubview:view];
    if ([view isKindOfClass:[MarkerClass class]]) {
     CGAffineTransform invertedTransform = CGAffineTransformInvert(self.transform);
        [view setTransform:invertedTransform];
    }
}
Другие вопросы по тегам