J'ai des CALayers dans une vue hébergée par couche. Chacune de ces couches a des couches supplémentaires pour contenir (1) un bouton de fermeture et (2) une poignée de redimensionnement. Ces couches de «contrôle» supplémentaires sont ajoutées en tant que sous-couches à la couche parente.Empêcher la mise à l'échelle des sous-couches CALayer
Actuellement, lorsque j'effectue un zoom sur l'espace de travail dans lequel résident ces couches, tout est mis à l'échelle, y compris ces couches de contrôle. Cependant, je voudrais empêcher ces couches de contrôle d'être mises à l'échelle. Existe-t-il un moyen de contourner le comportement d'avoir des transformations d'échelle appliquées à toutes les sous-couches, sans avoir à surcharger la méthode drawInContext: pour chaque couche de contrôle (en supposant que cela est possible)? sans avoir à envoyer manuellement à chacune de ces couches de contrôle un setNeedsDisplay: avec chaque zoom?
J'ai trouvé ce fil qui parle de faire quelque chose de similaire mais la discussion va dans le sens de CATiledLayers ce qui n'est pas ce que je cherche ici.
Redrawing CALayer subclass when super layer is scaled
De plus, ce poste pose une question un peu connexe, mais les réponses ne sont pas applicables à ma situation, car je ne peux pas superposer les contrôles - ils doivent faire partie de la hiérarchie de la couche.
How do I keep a CALayer
, sublayer of a CATiledLayer
, from changing it's scale after a zoom?
J'ai fini par résoudre ce problème en remplaçant la méthode layoutSublayers de mes CALayers personnalisés, en obtenant la transformée d'échelle cumulée de la hiérarchie de couche, et en appliquant la transformation inverse aux sous-couches de contrôle. – Dalmazio