iOS开发之ReactiveCocoa框架(RAC)第三篇实例颜色选择器

xiaoxiao2021-02-28  113

RAC相对于传统的模式,拥有两个相当明显且重要的特性 1.编程逻辑的流畅性 2.编程代码的清晰性

我们可以以RAC信号量的方式,相互订阅控件,相互绑定控件变量。代码简洁,且结构清晰。

实现效果图:

代码部分:

Cocoapods引入ReactiveCocoa Podfile文件

platform :ios, "8.0" source 'https://github.com/CocoaPods/Specs.git' use_frameworks! target :'ReactiveCocoaDemo' do pod 'ReactiveCocoa', '~> 2.5' end

注:如何安装使用CocoaPods,请参考另一篇文章: http://blog.csdn.net/wtdask/article/details/74645581

.h文件

#import "ViewController.h" @import ReactiveCocoa; @interface ViewController () @property (weak, nonatomic) IBOutlet UILabel *rLable; @property (weak, nonatomic) IBOutlet UILabel *gLable; @property (weak, nonatomic) IBOutlet UILabel *blable; @property (weak, nonatomic) IBOutlet UISlider *rSlider; @property (weak, nonatomic) IBOutlet UISlider *gSlider; @property (weak, nonatomic) IBOutlet UISlider *bSlider; @property (weak, nonatomic) IBOutlet UITextField *rTextFilde; @property (weak, nonatomic) IBOutlet UITextField *GTextFilld; @property (weak, nonatomic) IBOutlet UITextField *BTextField; @property (weak, nonatomic) IBOutlet UIView *showView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. self.rTextFilde.text = self.GTextFilld.text = self.BTextField.text = @"0.5"; RACSignal * rSignal= [self blindSlider:self.rSlider textFilde:self.rTextFilde]; RACSignal * gSignal= [self blindSlider:self.gSlider textFilde:self.GTextFilld]; RACSignal * bSignal= [self blindSlider:self.bSlider textFilde:self.BTextField]; /* //方式一 [[[RACSignal combineLatest:@[rSignal,gSignal,bSignal]] map:^id(id value) { return [UIColor colorWithRed:[value[0]floatValue] green:[value[2]floatValue] blue:[value[1]floatValue] alpha:1.0f]; }] subscribeNext:^(id x) { //注意RAC的回调一般都不是主线程,需要回到主线程以避免不必要的BUG dispatch_async(dispatch_get_main_queue(), ^{ self.showView.backgroundColor = x; }); }]; */ //方式二 RACSignal * changeValueSignal = [[RACSignal combineLatest:@[rSignal,gSignal,bSignal]] map:^id(id value) { return [UIColor colorWithRed:[value[0]floatValue] green:[value[2]floatValue] blue:[value[1]floatValue] alpha:1.0f]; }]; RAC(self.showView,backgroundColor) = changeValueSignal; } -(RACSignal* )blindSlider:(UISlider *)slider textFilde:(UITextField*)textField{ //textField触发一次且仅触发一次 RACSignal * textSignal =[[textField rac_textSignal] take:1]; //信号量的端,理解为一个频道的端点 RACChannelTerminal * signaSlider =[slider rac_newValueChannelWithNilValue:nil]; RACChannelTerminal * signalText = [textField rac_newTextChannel]; [signalText subscribe:signaSlider]; [[signaSlider map:^id(id value) { return [NSString stringWithFormat:@"%.02f",[value floatValue]]; }] subscribe:signalText]; return [[signalText merge:signaSlider] merge:textSignal]; }
转载请注明原文地址: https://www.6miu.com/read-73617.html

最新回复(0)