ProgressHUD

1. MBProgressHUD

項(xiàng)目中經(jīng)常會(huì)用到MBProgressHUD校辩,升級(jí)到1.0版本后填抬,很多屬性發(fā)生了變化,demo提供的示例也幾乎全用GCD的寫法烛芬,代碼顯得更加簡(jiǎn)明緊湊。認(rèn)真看了一下飒责,收獲頗豐赘娄。

#import "ViewController.h"
#import <MBProgressHUD.h>

@interface ViewController ()
@property (nonatomic,assign) BOOL isCancel;
@end


- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    
    MBProgressHUD *hud =[MBProgressHUD showHUDAddedTo:self.view animated:YES];

    hud.bezelView.alpha = 0.8;   //背景框透明度,默認(rèn)為0.8
    hud.bezelView.color = [UIColor grayColor]; //背景框顏色
    hud.bezelView.layer.cornerRadius = 10;//背景框圓角宏蛉,默認(rèn)是10;
    
    hud.backgroundView.style = MBProgressHUDBackgroundStyleBlur;//背景模糊
    
    //hud.activityIndicatorColor = [UIColor redColor];//菊花顏色,廢棄但有效
    
    hud.label.text = @"loading...";
    hud.label.textColor = [UIColor redColor];//提示字體顏色
    hud.label.font = [UIFont systemFontOfSize:13];//詳情字體
    
    hud.detailsLabel.text = @"LoadingLoading...";
    hud.detailsLabel.textColor = [UIColor blueColor];//詳情字體顏色
    hud.detailsLabel.font = [UIFont systemFontOfSize:13];//詳情字體
    
    //hud.xOffset = 0;
    //hud.yOffset = -20;//提示框相對(duì)于父視圖的偏移量
    hud.offset = CGPointMake(0, 20);
    hud.minSize = CGSizeMake(50, 50);//設(shè)置背景框最小尺寸遣臼,實(shí)際大小為readonly
    
    hud.margin = 5;//設(shè)置各元素距離矩形邊框的距離
    hud.square = NO;//強(qiáng)制背景框?yàn)檎叫?    hud.removeFromSuperViewOnHide = YES;//隱藏時(shí)從父視圖刪除
    
    //1.0后最大變化也許就是新增button屬性
    [hud.button setTitle:@"cancel" forState:UIControlStateNormal];
    [hud.button addTarget:self action:@selector(go) forControlEvents:UIControlEventTouchUpInside];
    
    //進(jìn)度條
    hud.mode = MBProgressHUDModeAnnularDeterminate;
    //    HUD.mode = MBProgressHUDModeIndeterminate;//菊花,默認(rèn)值
    //    HUD.mode = MBProgressHUDModeDeterminate;//餅狀圖
    //    HUD.mode = MBProgressHUDModeDeterminateHorizontalBar;//進(jìn)度條
    //    HUD.mode = MBProgressHUDModeAnnularDeterminate;//圓環(huán)作為進(jìn)度條
    //    HUD.mode = MBProgressHUDModeCustomView; //需要設(shè)置自定義視圖時(shí)候設(shè)置成這個(gè)
    //    HUD.mode = MBProgressHUDModeText; //只顯示文本

     //1.0后幾乎全是這種寫法拾并,必須保證HUD在主線程
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        [self dosomething];
        dispatch_async(dispatch_get_main_queue(), ^{
            hud.hidden = YES;
        });
    });
   
}
//
- (void)go{
    self.isCancel = YES;
}
- (void)dosomething{
    
    self.isCancel = NO;
    float progress = 0.0f;
    while (progress < 1.0f) {
        
        if (self.isCancel) return;
        progress += 0.01f;
        dispatch_async(dispatch_get_main_queue(), ^{
            
            [MBProgressHUD HUDForView:self.view].progress = progress;
        });
        usleep(50000);//微秒揍堰,千分之一毫秒
    }
    
}

2. DACircularProgress

DACircularProgress 是一個(gè)專做做環(huán)形進(jìn)度條的第三方框架,使用起來(lái)也是十分的方便嗅义。

//懶加載
- (DACircularProgressView*)progressView{
    if (!_progressView) {
        _progressView = [[DACircularProgressView alloc]initWithFrame:CGRectMake(0, 0, 40, 40)];
        _progressView.center = self.view.center;
        _progressView.roundedCorners = YES;
        _progressView.progressTintColor = [UIColor darkGrayColor];
        _progressView.trackTintColor = [UIColor lightGrayColor];
        
    }
    return _progressView;
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

    [self.view addSubview:self.progressView];
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            [self dosomething];
            dispatch_async(dispatch_get_main_queue(), ^{
                self.progressView.hidden = YES;
                [self.progressView removeFromSuperview];
                self.progressView = nil;
            });
        });
}
- (void)dosomething{
    
    float progress = 0.0f;
    while (progress < 1.0f) {
        
        progress += 0.01f;
        =====對(duì)界面進(jìn)行刷新全部使用主線程========
        dispatch_async(dispatch_get_main_queue(), ^{
            self.progressView.progress = progress;
        });
        usleep(50000);//微秒屏歹,千分之一毫秒
    }    
}

DACircularProgress 還有一個(gè)子類,在加載圈中間顯示進(jìn)度

- (DALabeledCircularProgressView*)labeledProgressView{
    if (!_labeledProgressView) {
        _labeledProgressView = [[DALabeledCircularProgressView alloc]initWithFrame:CGRectMake(0, 0, 40, 40)];
        _labeledProgressView.roundedCorners = YES;
        _labeledProgressView.center = self.view.center;
    }
    return _labeledProgressView;
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

       [self.view addSubview:self.labeledProgressView];
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            [self dosomething];
            dispatch_async(dispatch_get_main_queue(), ^{
                self.labeledProgressView.hidden = YES;
            });
        });
}

3. SVProgressHUD

SVProgressHUD 是另一款易用的進(jìn)度框架之碗,由于其單例 設(shè)計(jì)蝙眶,不用每次初始化,大多方法是加號(hào)方法褪那。進(jìn)度條都需要注意的是刷新UI一定要在主線程中進(jìn)行幽纷,并且示例代碼中也幾乎全是用GCD在處理線程。

- (void)go{
    
//    [SVProgressHUD show];
//    [SVProgressHUD showWithStatus:@"我愛(ài)你"];
//    [SVProgressHUD showSuccessWithStatus:@"我愛(ài)你"];
//    [SVProgressHUD showInfoWithStatus:@"我愛(ài)你嗎"];
//    [SVProgressHUD showErrorWithStatus:@"我不愛(ài)你"];
    [SVProgressHUD showProgress:0 ];
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        // time-consuming task
        [self doSomeThing];
        dispatch_async(dispatch_get_main_queue(), ^{
            [SVProgressHUD dismiss];
        });
    });

}
- (void)doSomeThing{
    
    CGFloat progress = 0.0;
    while (progress < 1.0) {
        
        dispatch_async(dispatch_get_main_queue(), ^{
           
            [SVProgressHUD showProgress:progress status:[NSString stringWithFormat:@"%.2f%%",progress]];
            if (progress > 1.0) {
                return ;
            }
        });
        
    }
   
}

4. JHUD

除了簡(jiǎn)單的效果博敬,JHUD 可以使用圖片數(shù)組友浸,或gif 圖快速的自定義ProrgerssView

//源碼中建議寫成懶加載
 self.hudView = [[JHUD alloc]initWithFrame:self.view.bounds];
 //self.hudView.indicatorBackGroundColor = [[UIColor greenColor] colorWithAlphaComponent:0.1];
// self.hudView.indicatorForegroundColor = [UIColor redColor];
  
 //類型為JHUDLoadingTypeFailure時(shí),設(shè)置的回調(diào)方法  
 typeof(self) weakself = self;
 [self.hudView setJHUDReloadButtonClickedBlock:^{
        [weakself go];
    }];

JHUD 共5種類型

    //hudType:
    //JHUDLoadingTypeCircle           = 0,
    //JHUDLoadingTypeCircleJoin       = 1,
    //JHUDLoadingTypeDot              = 2,

    self.hudView.messageLabel.text = @"Hello ,this is a circle animation";
    [self.hudView showAtView:self.view hudType:JHUDLoadingTypeCircleJoin];
    
  
    //JHUDLoadingTypeCustomAnimations = 3,

    NSMutableArray *arr = [NSMutableArray array];
    for (int i = 0; i < 2; i++) {
        UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg",i]];
        [arr addObject:image];
    }
    self.hudView.indicatorViewSize = CGSizeMake(60, 60);
    self.hudView.customAnimationImages = arr;
    self.hudView.messageLabel.text = @"Hello ,this is a circle animation";
    [self.hudView showAtView:self.view hudType:JHUDLoadingTypeCustomAnimations];
    
    //JHUDLoadingTypeGifImage         = 4,

    NSString *path = [[NSBundle mainBundle] pathForResource:@"loadinggif3" ofType:@"gif"];
    NSData *data = [NSData dataWithContentsOfFile:path];
    self.hudView.gifImageData = data;
    self.hudView.indicatorViewSize = CGSizeMake(100, 100);
    self.hudView.messageLabel.text = @"please wait....";
    [self.hudView showAtView:self.view hudType:JHUDLoadingTypeGifImage];
    
    //JHUDLoadingTypeFailure          = 5,

    self.hudView.indicatorViewSize = CGSizeMake(100, 100);
    self.hudView.messageLabel.text = @"Can't get data, please make sure the interface is correct !";
    [self.hudView.refreshButton setTitle:@"Refresh" forState:UIControlStateNormal];
    self.hudView.customImage = [UIImage imageNamed:@"5.jpg"];
    [self.hudView showAtView:self.view hudType:JHUDLoadingTypeFailure];

    //隱藏
    //[self.hudView hide];
    //[self.hudView hideAfterDelay:3];
    
    //類方法
    [JHUD showAtView:self.view message:@"我愛(ài)你" hudType:JHUDLoadingTypeCircle];
    [JHUD hideForView:self.view];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末偏窝,一起剝皮案震驚了整個(gè)濱河市收恢,隨后出現(xiàn)的幾起案子武学,更是在濱河造成了極大的恐慌,老刑警劉巖派诬,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劳淆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡默赂,警方通過(guò)查閱死者的電腦和手機(jī)沛鸵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)缆八,“玉大人曲掰,你說(shuō)我怎么就攤上這事∧纬剑” “怎么了栏妖?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)奖恰。 經(jīng)常有香客問(wèn)我吊趾,道長(zhǎng),這世上最難降的妖魔是什么瑟啃? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任论泛,我火速辦了婚禮,結(jié)果婚禮上蛹屿,老公的妹妹穿的比我還像新娘屁奏。我一直安慰自己,他們只是感情好错负,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布坟瓢。 她就那樣靜靜地躺著,像睡著了一般犹撒。 火紅的嫁衣襯著肌膚如雪折联。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天识颊,我揣著相機(jī)與錄音崭庸,去河邊找鬼。 笑死谊囚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的执赡。 我是一名探鬼主播镰踏,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼沙合!你這毒婦竟也來(lái)了奠伪?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绊率,沒(méi)想到半個(gè)月后谨敛,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滤否,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年脸狸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片藐俺。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡炊甲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出欲芹,到底是詐尸還是另有隱情卿啡,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布菱父,位于F島的核電站颈娜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏浙宜。R本人自食惡果不足惜官辽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望梆奈。 院中可真熱鬧野崇,春花似錦、人聲如沸亩钟。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)清酥。三九已至扶镀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間焰轻,已是汗流浹背臭觉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辱志,地道東北人蝠筑。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像揩懒,于是被迫代替她去往敵國(guó)和親什乙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)已球、插件臣镣、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,121評(píng)論 4 61
  • 前言 ObjectMapper是一個(gè)基于Swfit語(yǔ)言實(shí)現(xiàn)JSON和Model間互轉(zhuǎn)的第三方開(kāi)源類庫(kù)git傳送門:...
    Mcccc閱讀 905評(píng)論 0 2
  • 在公務(wù)員這個(gè)相對(duì)穩(wěn)定的行業(yè)忆某,我好像沒(méi)有認(rèn)真思考過(guò)我的職業(yè)規(guī)劃… 我不想當(dāng)領(lǐng)導(dǎo)点待,就這樣安穩(wěn)地隨著工作年限的增長(zhǎng),級(jí)別...
    哇哇來(lái)啦閱讀 214評(píng)論 2 4
  • 我心里一再想著弃舒,放下執(zhí)念吧癞埠,執(zhí)著也是一種執(zhí)念,可是不行棒坏,執(zhí)念深入骨髓燕差,我要走一遍,我的人生沒(méi)有了這執(zhí)念坝冕,我還有...
    眼神犀利的貓閱讀 178評(píng)論 0 0
  • 今天群打卡的主題是源自建議徒探,讓我想到一個(gè)詞就是求同存異。 看了這個(gè)言辭懇切的建議喂窟,還有針對(duì)建議的其他群友的真知灼見(jiàn)...
    Sunny萍七閱讀 562評(píng)論 0 0