2015-02-13 17 views
8

devo una vista un'immagine che sto implementando gli angoli arrotondati sul sovrascrivendo seguente nel mio sottoclasse:Quale metodo viene chiamato su UIView quando viene ridimensionato dall'autolayout?

-(void)setFrame:(CGRect)frame { 
    [super setFrame:frame]; 
    [self.layout setCornerRadius:frame.size.width/10.0]; 
} 

Questa grande opera per la visualizzazione iniziale dell'immagine, ma se la dimensione delle immagini cambiano dovuti alla rotazione del dispositivo o ad altri meccanismi, questo metodo non viene chiamato per implementare il ridimensionamento.

Sto usando l'autolayout e voglio sapere quale metodo di UIView (e quindi UIImageView) viene chiamato quando i miei vincoli ridimensionano la vista in modo da poter ricalcolare il raggio dell'angolo ogni volta che questo ridimensionamento avviene. La mia supposizione (apparentemente falsa) era che il sistema di autolayout chiamato setFrame: per spostare/ridimensionare le viste in base alle esigenze.

+1

Prova a mettere questo in 'layoutSubviews'. – Rob

+0

Inserimento nel layout Opere di visualizzazione! Grazie Rob. L'unico problema che vedo è che la modifica è brusca anziché animata uniformemente, il che crea un effetto "sfarfallio" quando l'immagine viene ridimensionata da grande a piccola e viceversa. Ho provato a mettere questo in drawRect: per vedere se mi dà un'animazione liscia di ridimensionamento degli angoli, ma sembra drawRect: non viene nemmeno chiamato (almeno non nel simulatore)! – Michael

+0

Date un'occhiata al UIView Classe Riferimento: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/index.html#//apple_ref/doc/uid/TP40006816 Ci è un blocco specifico denominato "Note di sottoclassi" che potrebbe essere molto utile per te. – CarlesCF

risposta

6

Dalla documentazione sulla updateConstraints:

visualizzazioni personalizzate che si insediano i vincoli stessi dovrebbero farlo eseguendo l'override di questo metodo

....

Prima di layout viene eseguita, l'implementazione di verranno richiamati gli updateConstraints, consentendo di verificare che tutti i vincoli necessari per il contenuto siano disponibili in un momento in cui le proprietà della vista personalizzata non cambiano.

O dalla documentazione on layoutSubviews:

Si dovrebbe ignorare questo metodo solo se i comportamenti ridimensionamento automatico e costrizione a base dei subviews non offrono il comportamento desiderato. Puoi usare la tua implementazione per impostare direttamente i rettangoli dei frame delle tue subview.

ma se avete bisogno di fare questo su cambiamenti di rotazione, controllare willTransitionToTraitCollection:withTransitionCoordinator:

Implementors di questo metodo può essere utilizzato per adattare l'interfaccia in base ai valori di parametro newCollection. Un uso comune di questo metodo è di apportare modifiche allo stile di presentazione di alto livello quando cambia la classe della dimensione corrente.

Problemi correlati