美文网首页
RAC 实现按钮倒计时

RAC 实现按钮倒计时

作者: LGByte | 来源:发表于2019-03-27 11:58 被阅读0次

RAC 实现按钮倒计时

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    self.title=@"一个阅读";
    [self testOne];
}
-(void)testOne{
    UIButton * btn = [UIButton buttonWithType:UIButtonTypeCustom];
    [btn setTitle:@"按钮" forState:UIControlStateNormal];
    [btn setBackgroundColor:[UIColor colorWithRed:58/255.0f green:157/255.0f blue:255/255.0f alpha:1.0f]];
    btn.frame=  CGRectMake(30,100,100,30);
    btn.titleLabel.font = [UIFont systemFontOfSize:18.0f];
    btn.layer.cornerRadius = 6;
    btn.layer.masksToBounds = YES;
    [self.view addSubview:btn];
    RACSignal* (^countBlock)(UIButton*) = ^RACSignal*(UIButton* btn){
        RACSignal* countsingal =  [[[[RACSignal interval:1
                                              onScheduler:[RACScheduler mainThreadScheduler]]
                                      startWith:[NSDatedate]]
                                     scanWithStart:@(10)reduce:^id(NSNumber*running,idnext) {
                                         NSLog(@"running = %@",running);
                                         return@(running.integerValue-1);
                                     }]takeUntilBlock:^BOOL(NSNumber*x) {
                                         returnx.integerValue<0;
                                     }];
        returncountsingal;
    };

    RACSignal* (^CountBlock)(UIButton*) = ^RACSignal*(UIButton* btn){
        RACSignal* timeSigal =  [countBlock(btn) map:^id(NSNumber* value) {
            return [NSString  stringWithFormat:@"剩余%@",value];
        }];
        btn.enabled=NO;
        [btn setBackgroundColor:[UIColor grayColor]];
        __block id saveSubscriber =nil;
        RACSignal*resetStringSignal =
        [RACSignal createSignal:^RACDisposable *(id<RACSubscriber>  subscriber) {
            saveSubscriber = subscriber;
            returnnil;
        }];

        [timeSigal subscribeCompleted:^{
            btn.enabled=YES;
            [btn setBackgroundColor:[UIColor colorWithRed:58/255.0f green:157/255.0f blue:255/255.0f alpha:1.0f]];
            [saveSubscriber sendNext:@"按钮"];
            [saveSubscriber sendCompleted];
            NSLog(@"timer singal complte");
        }];
        [btnrac_liftSelector:@selector(setTitle:forState:)
                  withSignals:[RACSignalmerge:@[timeSigal,resetStringSignal]],
         [RACSignal return:@(UIControlStateNormal)], nil];
        returntimeSigal;
    };
    btn.rac_command = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
        returnCountBlock(btn);
    }];
}

相关文章

  • RAC 实现按钮倒计时

    RAC 实现按钮倒计时

  • ReactiveCocoa(RAC) 2018-01-25

    RAC监听按钮点击事件 [[self.button rac_signalForControlEvents:UICo...

  • 倒计时

    Requirements 实现按钮倒计时: 基于GCD的倒计时 github链接:https://github.c...

  • iOS快速实现一个保存记录的倒计时按钮

    iOS开发中在登录、注册、找回密码等页面经常需要实现倒计时按钮,但是很多情况下用户点击倒计时按钮开始倒计时之后,再...

  • RAC 与 多线程

    07 - RAC与多线程 RAC怎么实现多线程并发处理订阅? RAC多线程模式怎么解决资源抢夺? RAC怎么实现取...

  • js中date倒计时

    获取倒计时之前,我们不妨先来看怎样获取当前时间吧!!! 获取倒计时 1、实现倒计时功能2、倒计时结束按钮可被点击,...

  • 一行代码倒计时和防止按钮重复点击原理

    一行代码倒计时 实例: 比较简单, demo地址 防止按钮重复点击原理 点击按钮,按钮底层实现代码 利用润runt...

  • 商品促销倒计时效果实现

    效果图展示 所有的知识点总结如下: 轮播图实现:swiper插件 倒计时功能的实现 倒计时结束,抢购按钮变为可点击...

  • 定时器

    定时器在开发中经常使用的,下面说两种定时器的的实现。 1:使用 GCD实现 (防止按钮重复点击) 2:使用 RAC...

  • iOS 验证码倒计时

    /** 倒计时方法 在点击获取验证码按钮的方法里调用此方法即可实现, 需要在倒计时里修改按钮相关的请在此方法里yo...

网友评论

      本文标题:RAC 实现按钮倒计时

      本文链接:https://www.haomeiwen.com/subject/atfzvqtx.html