2015-02-13 13 views
8

Ich habe ein Bild Ansicht, die ich durch Überschreiben des folgend in meiner Unterklasse abgerundete Ecken bin Umsetzung:Welche Methode wird in UIView aufgerufen, wenn die Größe durch das automatische Layout geändert wird?

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

Das für die erste Anzeige des Bildes funktioniert gut, aber wenn die Größe der Bildänderungen aufgrund Bei der Gerätedrehung oder einem anderen Mechanismus wird diese Methode nicht aufgerufen, um die Größenänderung zu implementieren.

Ich verwende Autolayout, und ich möchte wissen, welche Methode von UIView (und damit UIImageView) aufgerufen wird, wenn meine Einschränkungen die Ansicht so ändern, dass ich meinen Eckenradius immer neu berechnen kann, wenn diese Größenänderung stattfindet. Meine (scheinbar falsche) Annahme war, dass das automatische Layoutsystem setFrame: aufgerufen hat, um Ansichten nach Bedarf zu verschieben/zu ändern.

+1

Versuchen Sie, dies in 'layoutSubviews' zu setzen. – Rob

+0

In Layout einfügenSubviews funktioniert! Danke Rob. Das einzige Problem, das ich sehe, ist, dass die Änderung abrupt statt sanft animiert wird, was einen "Flimmereffekt" erzeugt, wenn das Bild von groß auf klein und umgekehrt geändert wird. Ich habe versucht, dies in drawRect: um zu sehen, ob es mir eine glatte Animation der Größenänderung Ecken, aber es scheint drawRect: wird nicht einmal aufgerufen (zumindest nicht im Simulator)! – Michael

+0

Werfen Sie einen Blick auf die UIView Klasse Referenz: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/index.html#//apple_ref/doc/uid/TP40006816 Es ist ein spezifischer Block namens "Subclassing Notes", der für Sie sehr hilfreich sein kann. – CarlesCF

Antwort

6

Aus der Dokumentation auf updateConstraints:

Benutzerdefinierte Ansichten, die Einschränkungen einrichten sich so durch Überschreiben dieser Methode

....

Vor Layout ausgeführt tun sollten, Ihre Implementierung von updateConstraints wird aufgerufen, damit Sie überprüfen können, ob alle erforderlichen Einschränkungen für Ihren Inhalt zu einem Zeitpunkt vorhanden sind, an dem sich die Eigenschaften der benutzerdefinierten Ansicht nicht ändern.

Oder von der Dokumentation auf layoutSubviews:

Sie diese Methode nur, wenn die automatischen Größen und Constraint-basierten Verhaltensweisen der Subviews bieten nicht das gewünschte Verhalten außer Kraft setzen sollte. Sie können Ihre Implementierung verwenden, um die Rahmenrechtecke Ihrer Unteransichten direkt festzulegen.

aber wenn Sie diese auf Rotationsänderungen tun müssen, Besuche willTransitionToTraitCollection:withTransitionCoordinator:

Implementors dieser Methode kann es verwenden, um die Schnittstelle zur Anpassung an den Werten im newCollection Parameter basiert. Eine häufige Verwendung dieser Methode besteht darin, Änderungen am übergeordneten Präsentationsstil vorzunehmen, wenn sich die aktuelle Größenklasse ändert.