2016-12-05 2 views
0

Ich versuche, in Swift eine Unterklasse von UIImageView zu erstellen, die ein Bild zeigt, das von einer benutzerdefinierten Eigenschaft (die von meinem Modell stammt) abgerufen wird. Der Code, den ich verwende, ist der folgende:Bild von einem UIImageView überschreiben

Leider funktioniert das nicht. Das Bild wird nie angezeigt. Ich habe auch einen Anruf an setNeedsDisplay versucht, aber kein Glück. Ich würde mich für Vorschläge freuen.

Antwort

3

Sie sollten userProfiledidSet verwenden.

class AvatarImageView: UIImageView { 
    var userProfile: UserProfile? { 
     didSet { 
      guard let userProfile = userProfile else { return } 
      image = userProfile.avatar 
     } 
    } 
} 

Sie haben überschreibt image 'set die Bildzeichnungs auslöst, aber es ist leer. Es bedeutet, was auch immer Sie einstellen, es wird nichts tun. Wenn Sie unter getavatarImageView.image anrufen, wird avatarImageView.userProfile.avatar zurückgegeben. Das ist alles, was du getan hast.

Was Sie tun möchten, ist ein Bild einstellen, wenn Sie Ihr eigenes Modell userProfile einstellen. didSet wird aufgerufen, unmittelbar nachdem der Wert festgelegt wurde. Also userProfile 's didSet wird immer aufgerufen, wenn ein neuer Wert gesetzt hat und ich rufe UIImageView.image = in didSet.

dieses article

+0

lesen, die wie ein Zauber funktioniert, danke! Kannst du erklären, warum die andere Version nicht funktioniert? – BlackWolf

+0

Vielen Dank für den verlinkten Artikel, ich habe das vor dem Posten gelesen. Ich verstehe, dass der leere Setter ein Problem ist, weil es für die Ansicht keine Möglichkeit gibt zu wissen, wann sich das Bild tatsächlich geändert hat. Ich verstehe immer noch nicht, warum es nicht funktioniert, 'setNeedsDisplay' von' userProfile' 'didset' aufzurufen. – BlackWolf

+0

@BlackWolf Was meinst du mit 'nicht funktioniert'? Rufen Sie 'setNeedsDisplay' in' userProfile's 'didSet' auf und' AvatarImageView' aktualisiert nicht die neue Gruppe 'userProfile.avatar'? – Ryan

Verwandte Themen