2010-05-26 8 views
8

J'expérimente en utilisant cagradientlayer pour dessiner des dégradés dans notre application au lieu d'avoir une sous-classe de gérer les dégradés. Un snafu que j'ai rencontré est que lorsque la vue qui a le dégradé en tant que sous-couche de sa couche principale est redimensionnée pour s'adapter aux données que j'essaie de montrer, la couche ne se redimensionne pas avec elle. Je finis par avoir la couche de dégradé fin à la taille de l'image d'origine tandis que le cadre de ma vue est beaucoup plus grand.Comment puis-je redimensionner automatiquement le cadre d'un calque en fonction du cadre de son super-calque ou de son image?

Y a-t-il un moyen d'avoir l'autoresize de la sous-couche pour qu'elle s'adapte à la trame de sa super-couche, ou à l'image de la super-couche?

Répondre

9

Mettre en œuvre layoutSubviews dans la sous-classe de votre vue. Il est appelé lorsque le cadre est redimensionné (ou lorsque setNeedsLayout est appelé). Il suffit de définir le cadre de la couche aux limites de la vue:

-(void)layoutSubviews 
{ 
    someSubview.frame = self.bounds; // make the subview frame match its view 
} 
+0

J'espère ne pas avoir besoin d'une sous-classe du tout, mais certaines fonctionnalités qui peuvent exister dans CALayers que je Je n'arrive pas à trouver que ça ferait ça pour moi (sous-classer une couche n'est pas hors de question). – Kevlar

+0

Comment redimensionnez-vous la vue? Je redimensionne les vues en définissant le cadre et je n'ai jamais eu à redimensionner les calques. – progrmr

+0

Je règle le cadre dans certains cas, et je laisse la vue s'autoriser dans d'autres. Je pense que le problème pourrait être que lorsque je redimensionne les vues manuellement, je désactive l'autoresizing des sous-vues afin que les sous-vues ne soient pas redimensionnées; Cela pourrait être mon problème. – Kevlar

2

Cela fonctionne encore mieux

-(void)viewWillLayoutSubviews 
+1

Mieux que quoi? Et pourquoi? S'il vous plaît assurez-vous de fournir des réponses complètes. –

+0

Mieux en ce qu'il fera réellement ce qui est prévu ici, je pense. – GregJaskiewicz

+0

Au moment où j'ai posé cette question, je ne pense pas que UIViewController avait cette méthode. Je suis d'accord que si vos vues sont des vues de stock gérées par un uiviewcontroller que vous voudriez faire cela au lieu de layoutSubviews dans une sous-classe UIView. – Kevlar