05.RxSwif 常用控件的使用

2019-08-13  本文已影响0人  smart_M
1.btn.rx.tap
        // 接下来我们处理性别选择
        // 现在我们想象性别选择按钮的背后的逻辑
        // 1 : 性别的选择 和 上面生日的选择 决定下面更新按钮 : 我们常见的必选项
        // 2 : 性别的选择 是由我们的两个按钮的处理,我们没必要分开逻辑
        
        let genderSelectOB = Variable<LGGender>(.notSelcted)
        maleBtn.rx.tap
            .map{ LGGender.male } // 男生的序列
            .bind(to: genderSelectOB) // 绑定到我们定义的序列
            .disposed(by: disposeBag)
        
        femaleBtn.rx.tap
            .map{ LGGender.female } // 男生的序列
            .bind(to: genderSelectOB) // 绑定到我们定义的序列
            .disposed(by: disposeBag)
2.picker.rx.date
        // 首先我们的出生日期不能早于今天,否则边框变色
        let birthdayOB = birthdayPicker.rx.date
            .map { LGDataPickerValidator.isValidDate(date: $0) }
        
        // 背景色
        birthdayOB.map { $0 ? UIColor.orange : UIColor.clear}
            .subscribe(onNext: { (color) in
                self.birthdayPicker.layer.borderColor = color.cgColor
            })
            .disposed(by: disposeBag)

        // 按钮点击 - 常规思维就是给一个变量记录
        // Rx思维 应该是绑定到相应的序列里面去
        // 这样的序列就是我们的 genderSelectionOb : male female male ...枚举的值
    
        let genderSELOB = genderSelectOB.asObservable().map { $0 != .notSelcted ? true : false }
        // 控制我们的点击更新按钮 - 被两个序列共同影响
        Observable.combineLatest(birthdayOB,genderSELOB) { $0 && $1}
            .bind(to: updateBtn.rx.isEnabled)
            .disposed(by: disposeBag)
3.switch.rx.value
/**
         对于UISwitch来说:
         
         当UISwitch为OFF时,表示用户不了解Swift,因此,下面的UISlider应该为0;
         当UISwitch为ON时,可以默认把UISlider设置在1/4的位置,表示大致了解;
         
         对于UISlider来说:
         
         当UISlider不为0时,应该自动把UISwitch设置为ON;
         当UISlider为0时,应该自动把UISwitch设置为OFF;
         */
        // on off  -> 0.25  0
        knowSwiftSwitch.rx.value.map { $0 ? 0.25 : 0}
            .bind(to: swiftLevelSlider.rx.value)
            .disposed(by: disposeBag)
4.silder.rx.value
        // 0  1 true false
        swiftLevelSlider.rx.value.map { $0 != 0 ? true : false}
            .bind(to: knowSwiftSwitch.rx.isOn)
            .disposed(by: disposeBag)
5.stepper.rx.value
    passionToLearnStepper.rx.value.skip(1).subscribe(onNext: { (value) in
            self.heartHeightConstraint.constant = CGFloat(value - 10)
        }).disposed(by: disposeBag)

效果图:

上一篇下一篇

猜你喜欢

热点阅读