2014-06-16 3 views
0

je la hiérarchie suivante: vue scrollview (avec défilement et zoom est activé) containerview imageview (avec une carte) vues pour les boutons vues pour panneau de navigationhiérarchie synchronisée de UIViews et CALayers

Au cours de la image view Je dois mettre un point d'intérêt (en fonction de la catégorie que l'utilisateur sélectionne): Les problèmes sont: si je les attache à la vue conteneur, ils obtiennent la position correcte est très facile, mais lors du zoom ils seront zoom avec l'image, et ils devraient garder le même s Si je les attache à la vue principale, j'ai deux problèmes: 1 pour trouver leur position hiérarchique entre scrollview et vue pour les boutons, ize (1) si je les attache à la scrollview je ne vois rien .. etc (ils obtiennent en haut de l'application et devrait être juste au-dessus de la carte, mais en dessous des panneaux de contrôle, boutons, etc 2 pour coordonner avec le zoom et faire défiler-fait avec convertPoint: toView Si j'ajoute une vue (frère de affichage de conteneur sous le scrollview) ils montrent bien, mais je n'ai aucune entrée de l'utilisateur sur eux (ils ne reçoivent pas touches) Si je convertis cette sous-vue soeur à un CALayer, je ne reçois pas les sous-traitants (POI) à montré .

(1) J'ai essayé de sous-classer la vue de conteneur et de surcharger setTransform en appliquant CGAffineTransform invertedTransform = CGAffineTransformInvert (transformer); mais j'ai eu des problèmes en passant un tableau avec des références de vues

Que recommanderiez-vous de faire dans ce cas? Merci beaucoup!

S.

+0

Si vous avez résolu votre problème, vous seriez mieux d'écrire une réponse à votre propre question et en l'acceptant, plutôt que d'éditer la question. – jrturton

+0

Bonjour jrturton, merci beaucoup pour votre commentaire. Je suis nouveau à SO. Passez une bonne journée.. – user63391

Répondre

0

J'ai finalement ajouté à subviews containerView et je l'ai sous-classé il:

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

Le seul problème est que avant le zoom containerView, une version courte taille des marqueurs apparaître sur l'écran.

Après avoir passé un certain temps, je l'ai trouvé que je l'emporterait sur addSubview aussi, pour obtenir une première transformation de la façon suivante:

-(void)addSubview:(UIView *)view { 
    [super addSubview:view]; 
    if ([view isKindOfClass:[MarkerClass class]]) { 
    CGAffineTransform invertedTransform = CGAffineTransformInvert(self.transform); 
     [view setTransform:invertedTransform]; 
    } 
}