2016-12-05 8 views
0

Я пытаюсь создать подкласс UIImageView в Swift, который показывает изображение, полученное из пользовательского свойства (исходящего из моей модели). Код, который я использую, является следующим:Переопределить образ UIImageView

class AvatarImageView: UIImageView { 
    var userProfile: UserProfile? 

    override var image: UIImage? { 
     set {} 

     get { 
      return self.userProfile?.avatar 
     } 
    } 
} 

К сожалению, это не работает. Изображение никогда не отображается. Я также попробовал позвонить setNeedsDisplay, но не повезло. Я был бы рад за предложения.

ответ

3

Вы должны использовать userProfile's didSet.

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

Вы переопределяет image 'set который вызывает рисунок изображения, но он пуст. Это означает, что вы ничего не делаете, он ничего не сделает. Для get, если вы позвоните avatarImageView.image, он вернется avatarImageView.userProfile.avatar. Это все, что вы сделали.

Что вы хотите сделать, это установить изображение, когда вы установите свою собственную модель userProfile. didSet вызывается сразу после установки значения. Так userProfiledidSet вызывается каждый раз, когда новое значение имеет значение, и я просто звоню UIImageView.image = в didSet.

Читать эту article

+0

Это работает как шарм, спасибо! Можете ли вы объяснить, почему другая версия не работает? – BlackWolf

+0

Спасибо за связанную статью, я прочитал ее перед публикацией. Я понимаю, что пустой сеттер является проблемой, потому что нет возможности для представления знать, когда изображение действительно изменилось. Я все еще не понимаю, почему вызов 'setNeedsDisplay' из' didSet' 'userProfile' не работает. – BlackWolf

+0

@BlackWolf Что значит «не работает»? Вы вызываете 'setNeedsDisplay' в' userProfile' 'didSet' и' AvatarImageView' не обновляет новый набор 'userProfile.avatar'? – Ryan

 Смежные вопросы

  • Нет связанных вопросов^_^