2016-12-05 1 views
0

스위프트에 UIImageView이라는 하위 클래스를 만들려고합니다. 내 모델에서 가져온 사용자 지정 속성에서 가져온 이미지를 보여줍니다. 내가 사용하는 코드는 다음과 같습니다 :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 
     } 
    } 
} 

당신은 오버라이드 (override)에게 이미지를 그리기 트리거 image 'set을 가지고 있지만 그것은 비어 있습니다. 그것은 무엇이든 설정한다는 것을 의미합니다. 아무 것도하지 않습니다. get의 경우 avatarImageView.image으로 전화하면 avatarImageView.userProfile.avatar을 반환합니다. 그게 전부 네가 한 짓이야.

당신이하고 싶은 일은 자신의 모델을 설정할 때 이미지를 설정하는 것입니다 userProfile. 값이 설정된 직후 didSet이 호출됩니다. 따라서 userProfiledidSet은 새로운 값이 설정 될 때마다 호출되며 UIImageView.image =didSet에 호출합니다.

읽어보기 article

+0

감사합니다. 왜 다른 버전이 작동하지 않는지 설명 할 수 있습니까? – BlackWolf

+0

링크 된 기사를 제공해 주셔서 감사합니다. 게시하기 전에 읽었습니다. 뷰가 이미지가 실제로 변경된시기를 알 수있는 방법이 없기 때문에 빈 세터가 문제라는 것을 알고 있습니다. 나는 아직도'userProfile'의'didSet'에서'setNeedsDisplay'를 호출하는 것이 왜 작동하지 않는지 이해하지 못합니다. – BlackWolf

+0

@BlackWolf '작동하지 않는다'는 것은 무엇을 의미합니까? 'userProfile'의'didSet'에서'setNeedsDisplay'를 호출하고'AvatarImageView'가 새로운 세트'userProfile.avatar'를 업데이트하지 않습니까? – Ryan

관련 문제