Kürzlich unsere App benötigen einen Ersatz in Bildabruflogik, so dass Client sollte ein Bild mit seiner Größe anfordern (Bild wird vom Server aufgebaut dynamisch).iOS Bild lädt von URL Spezifizierungs Größe
Bild-URL hat folgendes Format: http://image.server.url/path?width={{width}}&height={{height}}
Die meisten der benutzerdefinierten Ansichten werden in dem folgenden Muster aufgebaut:
- (instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
// do some initializations
}
return self;
}
- (void)setImageURL:(NSURL *)URL {
// do image fetching
}
Und es wird instanziiert wie:
SomeView *view = [[SomeView alloc] init];
view.imageURL = [NSURL URLWithString:@"..."];
[self addSubview:view];
Diese war kein Problem (da die Größe aller Bilder statisch ist), aber wenn ein Bild mit dynamischer Größe angefordert wird, ist es nicht verfügbar, weil es als Bild fetchi ng wird ausgeführt, bevor -layoutSubviews
aufgerufen wird, die Größe des Zielbildcontainers ist immer Null.
Schließlich müssen wir den Zeitpunkt herauszufinden, wenn das Layout abgeschlossen ist (Beobachter unter Verwendung von für die Bild Behälter) oder haben statische Größe für alle Bild Containern.
Was wäre die beste Lösung dafür sein?
Die beste Lösung wäre, Netzwerk-Assets asynchron zu laden, dh. Sobald der Download abgeschlossen ist, aktualisieren Sie Ihre Benutzeroberfläche mit "Was ist wirklich real". In der Praxis bedeutet dies, dass während des Ladens der Netzwerkressourcen entweder eine animierte Fortschrittsgrafik ("loading! Wait!") Oder ein Platzhalter-Asset (Grafik mit niedriger Auflösung, während Sie die echte Grafik erhalten) angezeigt wird. – xaphod