// // RQExercisExplainCell.m // SDJK // // Created by 张嵘 on 2022/7/2. // #import "RQExercisExplainCell.h" @interface RQExercisExplainCell () @property (nonatomic, readwrite, strong) RQExercisExplainItemViewModel *viewModel; @property (weak, nonatomic) IBOutlet UILabel *errorRateLabel; @property (weak, nonatomic) IBOutlet UIButton *starOneBtn; @property (weak, nonatomic) IBOutlet UIButton *starTwoBtn; @property (weak, nonatomic) IBOutlet UIButton *starThreeBtn; @property (weak, nonatomic) IBOutlet UIButton *starFourBtn; @property (weak, nonatomic) IBOutlet UIButton *starFiveBtn; @property (weak, nonatomic) IBOutlet UIImageView *videoCoverImageView; @property (weak, nonatomic) IBOutlet YYLabel *explainLabel; @property (weak, nonatomic) IBOutlet UIView *videoView; @property (weak, nonatomic) IBOutlet UIView *textView; @property (weak, nonatomic) IBOutlet NSLayoutConstraint *textViewToTop; @property (weak, nonatomic) IBOutlet UIView *voiceView; @property (weak, nonatomic) IBOutlet YYAnimatedImageView *voiceImageView; @property (weak, nonatomic) IBOutlet UIButton *voiceBtn; @end @implementation RQExercisExplainCell #pragma mark - PublicMethods + (instancetype)cellWithTableView:(UITableView *)tableView { static NSString *ID = @"RQExercisExplainCell"; RQExercisExplainCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; if (!cell) { cell = [self rq_viewFromXib]; cell.selectionStyle = UITableViewCellSelectionStyleNone; } return cell; } - (void)bindViewModel:(RQExercisExplainItemViewModel *)viewModel { @weakify(self) _viewModel = viewModel; _errorRateLabel.text = [NSString stringWithFormat:@"%.1f%%",viewModel.exerciseModel.error_rate * 100]; switch (viewModel.exerciseModel.diff_degree) { case 0: { _starOneBtn.selected = NO; _starTwoBtn.selected = NO; _starThreeBtn.selected = NO; _starFourBtn.selected = NO; _starFiveBtn.selected = NO; break; } case 1: { _starOneBtn.selected = YES; _starTwoBtn.selected = NO; _starThreeBtn.selected = NO; _starFourBtn.selected = NO; _starFiveBtn.selected = NO; break; } case 2: { _starOneBtn.selected = YES; _starTwoBtn.selected = YES; _starThreeBtn.selected = NO; _starFourBtn.selected = NO; _starFiveBtn.selected = NO; break; } case 3: { _starOneBtn.selected = YES; _starTwoBtn.selected = YES; _starThreeBtn.selected = YES; _starFourBtn.selected = NO; _starFiveBtn.selected = NO; break; } case 4: { _starOneBtn.selected = YES; _starTwoBtn.selected = YES; _starThreeBtn.selected = YES; _starFourBtn.selected = YES; _starFiveBtn.selected = NO; break; } case 5: { _starOneBtn.selected = YES; _starTwoBtn.selected = YES; _starThreeBtn.selected = YES; _starFourBtn.selected = YES; _starFiveBtn.selected = YES; break; } default: break; } [_videoCoverImageView yy_setImageWithURL:[NSURL URLWithString:viewModel.explainModel.ydt_video_pic] placeholder:RQWebImagePlaceholder() options:RQWebImageOptionAutomatic completion:^(UIImage * _Nullable image, NSURL * _Nonnull url, YYWebImageFromType from, YYWebImageStage stage, NSError * _Nullable error) { }]; _videoView.hidden = RQStringIsEmpty(self.viewModel.explainModel.short_video_url); _textView.hidden = RQStringIsEmpty(self.viewModel.exerciseModel.explain_js); _textViewToTop.priority = _videoView.hidden? UILayoutPriorityRequired : UILayoutPriorityDefaultHigh; _explainLabel.attributedText = viewModel.explainString; [_voiceView setTapActionWithBlock:^(UITapGestureRecognizer *tap) { @strongify(self) self.voiceBtn.selected = !self.voiceBtn.selected; }]; [RACObserve(self.voiceBtn, selected) subscribeNext:^(id _Nullable x) { @strongify(self) if (self.voiceBtn.selected) { [RQ_MUSIC_MANAGER rq_resetStreamerWithURLString:self.viewModel.exerciseModel.explainjsmp3 DOUAudioStreamerStatusBlock:^(DOUAudioStreamerStatus status) { if (status == DOUAudioStreamerPlaying) { _voiceImageView.image = [UIImage qmui_animatedImageNamed:@"语音播放.gif"]; } else if (status == DOUAudioStreamerFinished) { _voiceImageView.image = [UIImage qmui_animatedImageNamed:@"语音播放.gif"]; _voiceBtn.selected = NO; } else { _voiceImageView.image = [UIImage imageNamed:@"未播放静止"]; } }]; } else { [RQ_MUSIC_MANAGER rq_cancelStreamer]; _voiceImageView.image = [UIImage imageNamed:@"未播放静止"]; } }]; RAC(self.tryLookLabel, text) = [[RACObserve(RQ_USER_MANAGER, tryLookCount) takeUntil:self.rac_prepareForReuseSignal] map:^id _Nullable(id _Nullable value) { @strongify(self) if (RQ_USER_MANAGER.isVip > 0) { self.tryLookView.hidden = YES; self.tryLookCoverImageView.hidden = YES; self.tryLookBottomView.hidden = YES; self.tryLookBgImageView.hidden = YES; } else { self.tryLookBottomView.hidden = NO; self.tryLookBgImageView.hidden = NO; if (RQ_USER_MANAGER.tryLookCount == 0) { self.tryLookView.hidden = NO; self.tryLookCoverImageView.hidden = NO; } else { self.tryLookView.hidden = YES; self.tryLookCoverImageView.hidden = YES; } } return [NSString stringWithFormat:@"第%ld题",RQ_USER_MANAGER.tryLookCount]; }]; } #pragma mark - SystemMethods - (void)awakeFromNib { [super awakeFromNib]; _openVipBtn.layer.cornerRadius = _openVipBtn.rq_height / 2.f; [_openVipBtn setTapActionWithBlock:^(UITapGestureRecognizer *tap) { RQActivateVIPViewModel *activateVIPViewModel = [[RQActivateVIPViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:nil]; [RQ_APPDELEGATE.services pushViewModel:activateVIPViewModel animated:YES]; }]; } - (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; } @end