YMImproveInfoAvatarView.m 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. //
  2. // YMImproveInfoAvatarView.m
  3. // MSYOUPAI
  4. //
  5. // Created by YoMi on 2024/2/8.
  6. // Copyright © 2024 MS. All rights reserved.
  7. //
  8. #import "YMImproveInfoAvatarView.h"
  9. #import "YMImproveInfoViewModel.h"
  10. @interface YMImproveInfoAvatarView ()
  11. /// 完善信息VM
  12. @property (nonatomic, strong) YMImproveInfoViewModel *viewModel;
  13. /// 上传头像视图
  14. @property (nonatomic, strong) UIImageView *uploadAvatarView;
  15. /// 相机图标
  16. @property (nonatomic, strong) UIImageView *cameraIcon;
  17. @end
  18. @implementation YMImproveInfoAvatarView
  19. - (void)ym_setupViews{
  20. [self addSubview:self.uploadAvatarView];
  21. [self addSubview:self.cameraIcon];
  22. [self setNeedsUpdateConstraints];
  23. [self updateConstraintsIfNeeded];
  24. }
  25. - (void)updateConstraints{
  26. [self.uploadAvatarView mas_makeConstraints:^(MASConstraintMaker *make) {
  27. make.centerX.equalTo(self.mas_centerX);
  28. make.top.equalTo(self).offset(adapt(0));
  29. make.bottom.equalTo(self).offset(adapt(0));
  30. make.width.height.mas_equalTo(adapt(96));
  31. }];
  32. [self.cameraIcon mas_makeConstraints:^(MASConstraintMaker *make) {
  33. make.bottom.equalTo(self.uploadAvatarView.mas_bottom);
  34. make.right.equalTo(self.uploadAvatarView);
  35. make.width.height.mas_equalTo(adapt(28));
  36. }];
  37. [super updateConstraints];
  38. }
  39. - (void)ym_bindViewModel:(YMImproveInfoViewModel *)viewModel{
  40. if (!viewModel) {
  41. return;
  42. }
  43. _viewModel = viewModel;
  44. @weakify(self)
  45. [[[[[RACSignal combineLatest:@[
  46. RACObserve(self.viewModel, improveInfoAvatarUrl),
  47. RACObserve(self.viewModel, improveInfoMaleAvatarUrl),
  48. RACObserve(self.viewModel, improveInfoFemaleAvatarUrl),
  49. RACObserve(self.viewModel, genderType)
  50. ] reduce:^(NSString * improveInfoAvatarUrl, NSString * improveInfoMaleAvatarUrl, NSString * improveInfoFemaleAvatarUrl, NSNumber *genderType){
  51. if (!OCStringIsEmpty(improveInfoAvatarUrl)) {
  52. return improveInfoAvatarUrl;
  53. } else {
  54. switch ([genderType intValue]) {
  55. case 2:
  56. return improveInfoMaleAvatarUrl;
  57. break;
  58. case 1:
  59. return improveInfoFemaleAvatarUrl;
  60. break;
  61. default:
  62. return improveInfoAvatarUrl;
  63. break;
  64. }
  65. }
  66. }] distinctUntilChanged] deliverOnMainThread] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id _Nullable avatarUrl) {
  67. @strongify(self)
  68. [self.uploadAvatarView sd_setImageWithURL:[LCTools getImageUrlWithAddress:avatarUrl] placeholderImage:[UIImage imageNamed:@"ym_improve_info_camera_avatar"]];
  69. }];
  70. }
  71. - (UIImageView *)uploadAvatarView{
  72. if (!_uploadAvatarView) {
  73. _uploadAvatarView = [[UIImageView alloc]init];
  74. _uploadAvatarView.backgroundColor = HexColorFromRGB(0xF2F5FF);
  75. _uploadAvatarView.image = ImageByName(@"ym_improve_info_camera_avatar");
  76. _uploadAvatarView.contentMode = UIViewContentModeScaleAspectFit;
  77. _uploadAvatarView.layer.cornerRadius = adapt(96)/2;
  78. _uploadAvatarView.clipsToBounds = YES;
  79. _uploadAvatarView.userInteractionEnabled = YES;
  80. WS(weakSelf)
  81. UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
  82. [_uploadAvatarView addGestureRecognizer:tap];
  83. [[[tap rac_gestureSignal] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) {
  84. [weakSelf.viewModel openAvatarPickerPopupView];
  85. }];
  86. }
  87. return _uploadAvatarView;
  88. }
  89. - (UIImageView *)cameraIcon{
  90. if (!_cameraIcon) {
  91. _cameraIcon = [[UIImageView alloc]init];
  92. _cameraIcon.image = ImageByName(@"ym_improve_info_camera_icon");
  93. }
  94. return _cameraIcon;
  95. }
  96. @end