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.
Versuchen Sie, dies in 'layoutSubviews' zu setzen. – Rob
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
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