国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

iOS開發(fā)日記46-倒計(jì)時(shí)效果的實(shí)現(xiàn)

2019-11-14 17:57:50
字體:
供稿:網(wǎng)友

 今天博主有一個(gè)倒計(jì)時(shí)效果的實(shí)現(xiàn)的需求,遇到了一些困難點(diǎn),在此和大家分享,希望能夠共同進(jìn)步.

首先在需要用到的地方解析總的倒計(jì)時(shí)時(shí)間,博主沒有封裝,各位看官可以自行封裝

#PRagma mark--------新修改,增加倒計(jì)時(shí)

                NSString *stringOfTime=[NSString stringWithFormat:@"%@",d[@"sh

                double endUnixTime = [stringOfTime doubleValue];

                

//                NSLog(@"++++++%.2f",endUnixTime);

                

                NSCalendar *cal = [NSCalendar currentCalendar];

                unsigned int unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;

                NSDate *date1 = [NSDate date];

                NSDate *date2 = [NSDate dateWithTimeIntervalSince1970:endUnixTime];

                NSDateComponents *dOfd = [cal components:unitFlags fromDate:date1 toDate:date2 options:0];

                

                NSInteger sec = [dOfd hour]*3600+[dOfd minute]*60+[dOfd second];

                //sec是總秒數(shù)

                

//                NSLog(@"**********%@",dOfd);

                UILabel *labelOfTime=(UILabel *)[_scroll viewWithTag:6954321];

                if (sec>0) {

                    

                    [self setCountDownWithTotalSec:sec withLabel:labelOfTime];

                }

 然后使用GCD實(shí)現(xiàn)倒計(jì)時(shí)功能

- (void)setCountDownWithTotalSec:(NSInteger)totalSec withLabel:(UILabel *)timeLbl{

    __block NSInteger timeout = totalSec; //倒計(jì)時(shí)時(shí)間

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);

    dispatch_source_set_timer(_timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒執(zhí)行

    dispatch_source_set_event_handler(_timer, ^{

        if(timeout<=0){ //倒計(jì)時(shí)結(jié)束,關(guān)閉

            dispatch_source_cancel(_timer);

            dispatch_async(dispatch_get_main_queue(), ^{

                

                //設(shè)置界面的按鈕顯示 根據(jù)自己需求設(shè)置

                timeLbl.text = @"00:00:00";

                

            });

        }else{

            long hours = timeout / 3600;

            long minutes = (timeout - hours * 3600) / 60;

            int seconds = timeout % 60;

            NSString *strTime = [NSString stringWithFormat:@"%.2ld%.2ld%.2d",hours,minutes, seconds];

            NSString *firstH = [strTime substringWithRange:NSMakeRange(0, 1)];

            NSString *secondH = [strTime substringWithRange:NSMakeRange(1, 1)];

            NSString *firstM = [strTime substringWithRange:NSMakeRange(2, 1)];

            NSString *secondM = [strTime substringWithRange:NSMakeRange(3, 1)];

            NSString *firstS = [strTime substringWithRange:NSMakeRange(4, 1)];

            NSString *secondS = [strTime substringWithRange:NSMakeRange(5, 1)];

            NSString *newTimeString = [NSString stringWithFormat:@"%@%@:%@%@:%@%@",firstH,secondH,firstM,secondM,firstS,secondS];

            dispatch_async(dispatch_get_main_queue(), ^{

                

                timeLbl.text = newTimeString;//回到主線程顯示

                

            });

            timeout--;

        }

    });

    dispatch_resume(_timer);

}

 上述定時(shí)方法在后臺(tái)無法運(yùn)行,如果你的需求跟博主遇到的一樣BT,需要實(shí)時(shí)更新定時(shí)器,可以在回調(diào)中判斷程序狀態(tài),取消定時(shí),再監(jiān)聽程序喚醒,重新創(chuàng)建定時(shí)器

 

    dispatch_source_set_event_handler(_timer, ^{

         if ([UIapplication sharedApplication].applicationState==UIApplicationStateBackground) {

 

            dispatch_source_cancel(_timer);

            dispatch_async(dispatch_get_main_queue(), ^{

                 //設(shè)置界面的按鈕顯示 根據(jù)自己需求設(shè)置

                timeLbl.text = @" ";

             });

        }

 


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 伽师县| 三穗县| 墨玉县| 甘南县| 舒城县| 扎鲁特旗| 桐柏县| 马尔康县| 习水县| 伽师县| 江油市| 丁青县| 大兴区| 恭城| 保德县| 临西县| 全州县| 株洲县| 辰溪县| 洞头县| 龙陵县| 东乌| 普兰店市| 临洮县| 滦南县| 武邑县| 缙云县| 博湖县| 松滋市| 南皮县| 中方县| 德格县| 河津市| 双牌县| 三都| 修武县| 旬阳县| 赫章县| 富民县| 阆中市| 博兴县|