Faire pivoter uniquement la vue et non ses sous-vues

Y a-t-il un moyen par lequel la transformation d'une vue pour la rotation ne sera pas transmise à ses sous-vues? J'ai un MKAnnotationView personnalisé que je suis en rotation en fonction des valeurs d'en-tête de l'user. Dans la méthode ci-dessous dans la class de vue Annotation personnalisée, j'ajoute une sous-vue à la vue d'annotation.

- (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; if(selected) { [self addSubview:self.myCallOutView]; return; } [self.myCallOutView removeFromSuperview]; } 

mais le problème est quand ma vue d'annotation est tournée et puis je sélectionne n'importe quelle annotation, myCallOutView apparaît également tourné que je ne veux pas. Je fais pivoter la vue d'annotation personnalisée en utilisant la ligne ci-dessous

  [self setTransform:CGAffineTransformMakeRotation(angle * M_PI / -180.0)]; 

Comment puis-je éviter cette situation? Dois-je appliquer une transformation sur myCallOutView avant de l'append en tant que sous-vue?

Une solution très simple serait d'effectuer la rotation inverse sur la sous-vue:

 [self setTransform:CGAffineTransformMakeRotation(angle * M_PI / -180.0)]; // NOTE: we're using the negative of the angle here [self.myCallOutView setTransform:CGAffineTransformMakeRotation(- angle * M_PI / -180.0)]]; 

Cela annulera l'effet de la rotation sur l'aperçu.

Approche alternative: structurez vos vues un peu différemment: au lieu d'avoir vue A vue intérieure B, ayez les deux vues A et B étant sous-vues d'une vue de récipient C. Alors appliquez votre rotation pour voir A, B ne sera pas affecté. Et pour déplacer tout l'set sur l'écran, déplacez la vue conteneur C.