123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- //
- // 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
|