Синхронизированная иерархия 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];
}
}