2016-12-05 11 views
0

UIImageViewのサブクラスをSwiftで作成しようとしていますが、これは私のモデルからのカスタムプロパティから取得した画像を表示しています。私が使用しているコードは次のとおりです:UIImageViewのオーバーライド画像

class AvatarImageView: UIImageView { 
    var userProfile: UserProfile? 

    override var image: UIImage? { 
     set {} 

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

残念ながら、これは動作しません。画像は表示されません。私もsetNeedsDisplayへの呼び出しを試みましたが、運はありません。私は提案に満足しています。

答えて

3

userProfiledidSetを使用してください。

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

あなたは、画像を描画するトリガが、それは空でオーバーライドimagesetを持っています。それはあなたが設定したものを意味し、何もしません。 getの場合、avatarImageView.imageに電話すると、avatarImageView.userProfile.avatarが返されます。それはあなたがしたことのすべてです。

あなたがしたいことは、あなた自身のモデルuserProfileを設定したときに画像を設定することです。値が設定された直後にdidSetが呼び出されます。だからuserProfiledidSetは新しい値が設定されるたびに呼び出され、私はUIImageView.image =didSetに呼び出します。

魔法のように動作し、このarticle

+0

を読んで、あなたに感謝!あなたはなぜ他のバージョンがうまくいかないのか説明できますか? – BlackWolf

+0

リンク先の記事をありがとう、私は投稿する前にそれを読んだ。ビューが画像が実際に変更されたときを知る方法がないため、空のセッターが問題であると私は理解しています。私は 'userProfile'の' didSet'から 'setNeedsDisplay'を呼び出すのがなぜうまくいかないのかまだ分かりません。 – BlackWolf

+0

@BlackWolf 'does not work'とはどういう意味ですか? 'userProfile'の' didSet'で 'setNeedsDisplay'を呼びますか?' AvatarImageView'は新しいセット 'userProfile.avatar'を更新しませんか? – Ryan

関連する問題