在碼代碼過程中,我們經常用到MBProgressHUD,但我很少實例化使用,一般都是偷個懶直接顯示隱藏,這里貼上詳解,以便日后有樣式要求時使用。
1,MBProgressHUD常用屬性和用法Demo
- (void)testMBProgressHUD
{
NSLog(@"test MBProgressHUD ");
/*
要將一個MBProgressHUD顯示出來,1,創建對象;2,將HUD添加到view上;3,調用show方法
隱藏,1,hide:方法; 2,hide: afterDelay: 方法
其它的用法都是特殊的設置等
*/
HUD = [[MBProgressHUD alloc] init];
[self.view addSubview:HUD];
// HUD.mode = MBProgressHUDModeIndeterminate;//菊花,默認值 // HUD.mode = MBProgressHUDModeDeterminate;//圓餅,餅狀圖 // HUD.mode = MBProgressHUDModeDeterminateHorizontalBar;//進度條 HUD.mode = MBProgressHUDModeAnnularDeterminate;//圓環作為進度條 // HUD.mode = MBProgressHUDModeCustomView; //需要設置自定義視圖時候設置成這個 // HUD.mode = MBProgressHUDModeText; //只顯示文本 //1,設置背景框的透明度 默認0.8 HUD.opacity = 1; //2,設置背景框的背景顏色和透明度, 設置背景顏色之后opacity屬性的設置將會失效 HUD.color = [UIColor redColor]; HUD.color = [HUD.color colorWithAlphaComponent:1]; //3,設置背景框的圓角值,默認是10 HUD.cornerRadius = 20.0; //4,設置提示信息 信息顏色,字體 HUD.labelColor = [UIColor blueColor]; HUD.labelFont = [UIFont systemFontOfSize:13]; HUD.labelText = @"Loading..."; //5,設置提示信息詳情 詳情顏色,字體 HUD.detailsLabelColor = [UIColor blueColor]; HUD.detailsLabelFont = [UIFont systemFontOfSize:13]; HUD.detailsLabelText = @"LoadingLoading..."; //6,設置菊花顏色 只能設置菊花的顏色 HUD.activityIndicatorColor = [UIColor blackColor]; //7,設置一個漸變層 HUD.dimBackground = YES; //8,設置動畫的模式 // HUD.mode = MBProgressHUDModeIndeterminate; //9,設置提示框的相對於父視圖中心點的便宜,正值 向右下偏移,負值左上 HUD.xOffset = -80; HUD.yOffset = -100; //10,設置各個元素距離矩形邊框的距離 HUD.margin = 0; //11,背景框的最小大小 HUD.minSize = CGSizeMake(50, 50); //12設置背景框的實際大小 readonly CGSize size = HUD.size; //13,是否強制背景框寬高相等 HUD.square = YES; //14,設置顯示和隱藏動畫類型 有三種動畫效果,如下 // HUD.animationType = MBProgressHUDAnimationFade; //默認類型的,漸變 // HUD.animationType = MBProgressHUDAnimationZoomOut; //HUD的整個view后退 然后逐漸的后退 HUD.animationType = MBProgressHUDAnimationZoomIn; //和上一個相反,前近,最后淡化消失 //15,設置最短顯示時間,為了避免顯示后立刻被隱藏 默認是0 // HUD.minShowTime = 10; //16, /* // 這個屬性設置了一個寬限期,它是在沒有顯示HUD窗口前被調用方法可能運行的時間。 // 如果被調用方法在寬限期內執行完,則HUD不會被顯示。 // 這主要是為了避免在執行很短的任務時,去顯示一個HUD窗口。 // 默認值是0。只有當任務狀態是已知時,才支持寬限期。具體我們看實現代碼。 @property (assign) float graceTime; // 這是一個標識位,標明執行的操作正在處理中。這個屬性是配合graceTime使用的。 // 如果沒有設置graceTime,則這個標識是沒有太大意義的。在使用showWhileExecuting:onTarget:withObject:animated:方法時, // 會自動去設置這個屬性為YES,其它情況下都需要我們自己手動設置。 @property (assign) BOOL taskInProgress; */ //17,設置隱藏的時候是否從父視圖中移除,默認是NO HUD.removeFromSuperViewOnHide = NO; //18,進度指示器 模式是0,取值從0.0————1.0 // HUD.progress = 0.5; //19,隱藏時候的回調 隱藏動畫結束之后 HUD.completionBlock = ^(){ NSLog(@"abnnfsfsf"); }; //設置任務,在hud上顯示任務的進度 [HUD showWhileExecuting:@selector(myProgressTask) onTarget:self withObject:nil animated:YES]; // [HUD show:YES]; //兩種隱藏的方法 // [HUD hide:YES]; [HUD hide:YES afterDelay:5]; }
//任務,測試進度顯示
- (void)myProgressTask {
// This just increases the progress indicator in a loop float progress = 0.0f; while (progress < 1.0f) { progress += 0.01f; HUD.progress = progress; usleep(50000); } }
MBProgressHUD 使用詳解
1,MBProgressHUDMode枚舉
MBProgressHUD中定義的MBProgressHUDMode枚舉。它用來表示HUD窗口的模式,即我們從效果圖中看到的幾種顯示樣式。
typedef enum { // 使用UIActivityIndicatorView來顯示進度,這是默認值 MBProgressHUDModeIndeterminate, // 使用一個圓形餅圖來作為進度視圖 MBProgressHUDModeDeterminate, // 使用一個水平進度條 MBProgressHUDModeDeterminateHorizontalBar, // 使用圓環作為進度條 MBProgressHUDModeAnnularDeterminate, // 顯示一個自定義視圖,通過這種方式,可以顯示一個正確或錯誤的提示圖 MBProgressHUDModeCustomView, // 只顯示文本 MBProgressHUDModeText } MBProgressHUDMode;
2,MBProgressHUD的基本組成:
A,loading動畫:就是MBProgressHUD上部分顯示的動畫效果的一部分,這個區域也可以使用我們自己設定的UIImageView視圖,這個視圖顯示內容由我們設置的模式來決定,可以是菊花,進度條,圓環,也可以我們自定義視圖。
B,標題文本:主要用於顯示提示信息。這個文本框是可選的,通常位於loading動畫的下面,且是單行顯示。它會根據labelText屬性來自適應文本的大小,有上限,過長會顯示“…”。
C,詳情文本框。如果覺得標題不夠詳細,這里可以添加附屬信息,可以將詳細信息放到這里,該文本框顯示的是detailLabelText屬性的值,它是多行顯示的。另外詳情顯示還依賴於labelText屬性的值,只有labelText屬性被設置了,並且不是空串,才會顯示detailsLabel。
D,HUD背景框:主要作用是上面三個部分的一個背景,用來突出顯示上面三部分。
3,MBProgressHUD 常用屬性
MBProgressHUD幾個常用的屬性:
// 背景框的透明度,默認值是0.8 @property (assign) float opacity; // 背景框的顏色 // 需要注意的是如果設置了這個屬性,則opacity屬性會失效,即不會有半透明效果 @property (MB_STRONG) UIColor *color; // 背景框的圓角半徑。默認值是10.0 @property (assign) float cornerRadius; // 標題文本的字體及顏色 @property (MB_STRONG) UIFont* labelFont; @property (MB_STRONG) UIColor* labelColor; // 詳情文本的字體及顏色 @property (MB_STRONG) UIFont* detailsLabelFont; @property (MB_STRONG) UIColor* detailsLabelColor; // 菊花的顏色,默認是白色 @property (MB_STRONG) UIColor *activityIndicatorColor; dimBackground 屬性,由中心向MBProgressHUD視圖的四周繪制了一個漸變層。 @property (assign) BOOL dimBackground; //設置 MBProgressHUD 顯示的動畫模式 @property (assign) MBProgressHUDMode mode;
控制HUD的布局的幾個屬性:
// HUD相對於父視圖中心點的x軸偏移量和y軸偏移量
@property (assign) float xOffset; @property (assign) float yOffset; // HUD各元素與HUD邊緣的間距 @property (assign) float margin; // HUD背景框的最小大小 @property (assign) CGSize minSize; // HUD的實際大小 @property (atomic, assign, readonly) CGSize size; // 是否強制HUD背景框寬高相等 @property (assign, getter = isSquare) BOOL square;
MBProgressHUD是顯示或者隱藏時候提供的屬性:
// HUD顯示和隱藏的動畫類型 @property (assign) MBProgressHUDAnimation animationType; // HUD顯示的最短時間。設置這個值是為了避免HUD顯示后立即被隱藏。默認值為0 @property (assign) float minShowTime; // 這個屬性設置了一個寬限期,它是在沒有顯示HUD窗口前被調用方法可能運行的時間。 // 如果被調用方法在寬限期內執行完,則HUD不會被顯示。 // 這主要是為了避免在執行很短的任務時,去顯示一個HUD窗口。 // 默認值是0。只有當任務狀態是已知時,才支持寬限期。具體我們看實現代碼。 @property (assign) float graceTime; // 這是一個標識位,標明執行的操作正在處理中。這個屬性是配合graceTime使用的。 // 如果沒有設置graceTime,則這個標識是沒有太大意義的。在使用showWhileExecuting:onTarget:withObject:animated:方法時, // 會自動去設置這個屬性為YES,其它情況下都需要我們自己手動設置。 @property (assign) BOOL taskInProgress; // 隱藏時是否將HUD從父視圖中移除,默認是NO。 @property (assign) BOOL removeFromSuperViewOnHide; // 進度指示器,從0.0到1.0,默認值為0.0 @property (assign) float progress; // 在HUD被隱藏后的回調 @property (copy) MBProgressHUDCompletionBlock completionBlock;
注意:
1),MBProgressHUD視圖會充滿其父視圖的frame內,因此,當MBProgressHUD顯示時,它也會屏蔽父視圖的各種交互操作。
2)自定義loading動畫視圖,此時選擇的模式是MBProgressHUDModeCustomView。或者不顯示loading動畫視圖,而只顯示文本框(MBProgressHUDModeText)。
3)對於HUD的隱藏,MBProgressHUD提供了兩個方法,一個是-hide:,另一個是-hide:afterDelay:,后者基於前者
4)MBProgressHUD還為我們提供了幾個便捷顯示和隱藏HUD窗口的方法
+ (MB_INSTANCETYPE)showHUDAddedTo:(UIView *)view animated:(BOOL)animated + (BOOL)hideHUDForView:(UIView *)view animated:(BOOL)animated + (NSUInteger)hideAllHUDsForView:(UIView *)view animated:(BOOL)animated 5)MBProgressHUD還為我們提供了一個代理MBProgressHUDDelegate,這個代理中只提供了一個方法,即: - (void)hudWasHidden:(MBProgressHUD *)hud;//隱藏HUD后調用的方法
最后,感謝某位未知的大神的分享。