亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

iOS提示框,為什么你應該使用MBProgressHUD?

2019-11-14 18:18:49
字體:
來源:轉載
供稿:網友

這是一篇帶有一定筆者主觀感情色彩的比較文章.文章著重對比github上最流行的兩個iOS進度提示控件 MBPRogressHUD 與 SVProgressHUD的各自優劣,來幫助初學者找到一個適合的iOS提示框解決方案.

無論如何,你總是需要一個提示框.

提示框,進度提示,加載中提示等等,無論怎樣,你總是需要提示框來指示某個狀態正在后臺努力進行中.一個合適的提示框,更多的是用來增強用戶體驗.把最多的時間,用來做更核心的事;把這些不是非常重要的事,你應該試著使用一個成熟穩定的第三方來解決.

MBProgressHUD 還是 SVProgressHUD ?

許多時候,選擇都是很重要的,但是總是要做出選擇.每個人考慮的因素和角度不同,結論或許也不同.但是,你要明白,你現在是要找一個合適的方案來解決自己的關于"提示框"的需求,而不是去無意義的討論與分析.我推薦你使用 MBProgressHUD. 如果你只是想找一個答案,看到這里就夠了.下面會進行一些對比分析.有時候,羅列一些可選答案,總是讓人感覺很舒服的;但是我們最終都要做出選擇,表明自己的態度.就像你可以依然堅持自己的看法,我會依然深度使用 MBProgressHUD一樣.下面的分析不是要證明 MBProgressHUD 或 SVProgressHUD 誰好或者不好,更多的只是為了說明,我的選擇可能不是最佳的,但還是靠點譜的!

github 流行度: MBProgressHUD - SVProgressHUD = 2500

截止目前, MBProgressHUD 的關注度為 8556, SVProgressHUD 的關注度為 6003,差額在 2500左右.github上面的流行度是很能說明兩個第三方的相對優劣的,這就像各個書店上圖書的購買量和評論量總是和一本書的價值成正相關一樣!誠然, MBProgressHUD 和 SVProgressHUD 的關注度都是非常高的了,都已經屬于非常流行的 iOS 第三方了.但是,既然我要選一個深度使用,肯定是關注度更高的那個!在大多數時候,我相信"大家"的選擇,對自己是可有參考價值的!

接口易用性: MBProgressHUD == SVProgressHUD

以下是MBProgressHUD 和 SVProgressHUD 各自項目的github主頁上,各自的基本用法示例:

[MBProgressHUD showHUDAddedTo:self.view animated:YES];dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{    // Do something...    dispatch_async(dispatch_get_main_queue(), ^{        [MBProgressHUD hideHUDForView:self.view animated:YES];    });});
[SVProgressHUD show];dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{    // time-consuming task    dispatch_async(dispatch_get_main_queue(), ^{        [SVProgressHUD dismiss];    });});

在大多數場景中,你幾乎只會用到顯示隱藏這兩個最基本的方法,所以說,盡管 SVProgressHUD 自稱更加易用,但是我還是認為這真的看不出什么優勢.

接口豐富性: MBProgressHUD >> SVProgressHUD

MBProgressHUD 和 SVProgressHUD 都支持簡單的進度提示和文字提示.單從各自github主頁上來看, SVProgressHUD 似乎擁有更多的接口,但是事實并非如此.如果你下載過MBProgressHUD的示例就會發現,它能實現的功能要遠遠多于 文檔示例給出的簡單的 顯示隱藏.為了能讓大家更多的了解MBProgressHUD,列出部分方法與參數常量,具體信息可參考官方示例:

/** * 創建一個新的HUD,并把它添加并顯示到提供的視圖上.與之相對應的方法是 hideHUDForView:animated:. * * @note 這個方法會設置HUD的屬性`removeFromSuperViewOnHide`為YES.HUD會在隱藏時自動從父視圖上移除. * * @param view 將HUD添加到此視圖上. * @param animated YES,顯示時使用當前的動畫類型顯示;NO,直接顯示不使用動畫效果. * @return 新創建的HUD. * * @see hideHUDForView:animated: * @see animationType */+ (MB_INSTANCETYPE)showHUDAddedTo:(UIView *)view animated:(BOOL)animated;/** * 找到并隱藏子視圖最頂層的HUD.與之對應的方法是 showHUDAddedTo:animated:. * * @note 這個方法會設置HUD的屬性`removeFromSuperViewOnHide`為YES.HUD會在隱藏時自動從父視圖上移除. * * @param view 用來在其子視圖中查找HUD的視圖. * @param animated YES,隱藏時使用當前的動畫類型顯示;NO,直接隱藏不使用動畫效果. * @return YES,如果某個HUD被找到并被移除;否則返回NO. * * @see showHUDAddedTo:animated: * @see animationType */+ (BOOL)hideHUDForView:(UIView *)view animated:(BOOL)animated;/** * 找到子視圖中所有的HUD,并隱藏. * * @note 這個方法會設置HUD的屬性`removeFromSuperViewOnHide`為YES.HUD會在隱藏時自動從父視圖上移除. * * @param view 用來在其子視圖中查找HUD的視圖. * @param animated YES,隱藏時使用當前的動畫類型顯示;NO,直接隱藏不使用動畫效果. * @return 找到并移除的HUD的數量. * * @see hideHUDForView:animated: * @see animationType */+ (NSUInteger)hideAllHUDsForView:(UIView *)view animated:(BOOL)animated;/** * 找到并返回子視圖最頂層的HUD. * * @param view 用來在其子視圖中查找HUD的視圖. * @return 子視圖最頂層的HUD. */+ (MB_INSTANCETYPE)HUDForView:(UIView *)view;/** * 找到并返回子視圖中所有的HUD. * * @param view 用來在其子視圖中查找HUD的視圖. * @return 所有找到的HUD視圖(存儲 MBProgressHUD 對象的數組). */+ (NSArray *)allHUDsForView:(UIView *)view;/** * 使用屏幕尺寸創建HUD的便利初始化方法.  * * @param window 提供邊框值以初始化HUD的窗口.應該和HUD未來的父視圖相同(比如,創建 HUD 后,將HUD添加到此窗口上). */- (id)initWithWindow:(UIWindow *)window;/** * 使用指定視圖的邊框尺寸創建HUD的便利初始化方法.  * * @param view 提供邊框值以初始化HUD的視圖.應該和HUD未來的父視圖相同(比如,創建 HUD 后,將HUD添加到此視圖上). */- (id)initWithView:(UIView *)view;/**  * 顯示HUD.你需要確保調用此方法時,主線程未被其他任務阻塞,以便于更新視圖.當你已經在新的線程中開始(比如,使用NSOperation或者NSURLRequest的異步請求等)執行某個任務后,再執行此方法.  * * @param animated YES,顯示時使用當前的動畫類型顯示;NO,直接顯示不使用動畫效果. * * @see animationType */- (void)show:(BOOL)animated;/**  * 隱藏HUD.這個仍然會去嘗試調用代理的hudWasHidden:方法.此方法是 show: 的配對方法.當你的任務完成時,再使用它.  * * @param animated YES,隱藏時使用當前的動畫類型顯示;NO,直接隱藏不使用動畫效果. * * @see animationType */- (void)hide:(BOOL)animated;/**  *  延時隱藏HUD.這個仍然會去嘗試調用代理的hudWasHidden:方法.此方法是 show: 的配對方法.當你的任務完成時,再使用它.   *  * * @param animated YES,隱藏時使用當前的動畫類型顯示;NO,直接隱藏不使用動畫效果. * @param delay Delay in seconds until the HUD is hidden. * * @see animationType */- (void)hide:(BOOL)animated afterDelay:(NSTimeInterval)delay;/**  * 當在新線程執行某個后臺任務時,顯示HUD;任務完成時,自動隱藏HUD. * * 這個方法會處理自動釋放池的相關技術細節,所以你可以安全使用它. * * @param method HUD顯示期間,被執行的方法.這個方法會在一個新的線程中執行. * @param target HUD顯示期間,被調用的方法歸屬的實例對象. * @param object 用來傳遞給方法的可選對象. * @param animated YES,HUD使用當前的 animationType 動畫類型來顯示或隱藏;否則,顯示或隱藏時不使用動畫效果. * animations while (dis)appearing. */- (void)showWhileExecuting:(SEL)method onTarget:(id)target withObject:(id)object animated:(BOOL)animated;#if NS_BLOCKS_AVAILABLE/** * 當在后臺隊列中執行block時,顯示HUD;并在block執行完畢后,隱藏HUD. * * @see showAnimated:whileExecutingBlock:onQueue:completionBlock: */- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block;/** * 當在后臺隊列中執行block時,顯示HUD;并在block執行完畢后,隱藏HUD. * * @see showAnimated:whileExecutingBlock:onQueue:completionBlock: */- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block completionBlock:(MBProgressHUDCompletionBlock)completion;/** * 當在后臺隊列中執行block時,顯示HUD;并在block執行完畢后,隱藏HUD. * * @see showAnimated:whileExecutingBlock:onQueue:completionBlock: */- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue;/**  * 當在一個指定的隊列中執行block時,顯示HUD;block執行完畢后在主線程執行completion block;然后隱藏HUD. * * @param animated YES,HUD使用當前的 animationType 動畫類型來顯示或隱藏;否則,顯示或隱藏時不使用動畫效果. * @param block HUD顯示期間執行的block. * @param queue block在此隊列中執行. * @param completion 完成時執行的block. * * @see completionBlock */- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue		  completionBlock:(MBProgressHUDCompletionBlock)completion;

接口靈活性和可擴展性: MBProgressHUD > SVProgressHUD

首先,二者都是開放源代碼的,如果有特殊需求,可以完全自主定制;所以這里主要討論的是 MBProgressHUD 和 SVProgressHUD自身在不修改核心代碼的前提下的接口靈活性和可擴展性.同樣的但從文檔來看, SVProgressHUD 表現出更多的靈活性,參見: SVProgressHUD–比MBProgressHUD更好用的 iOS進度提示組件.但是事實并非如此! MBProgressHUD 入門文檔相對很少提及其靈活性,但其提供的DEMO中較完整地展示了它的強大之處.個人認為,單單允許使用自定義視圖作為提供框的視圖這一點,就足以讓SVProgressHUD 的絕大部分特性黯然失色;這也是我最終決定選定 MBProgressHUD 并深入使用 MBProgressHUD的重要原因.初次之外, MBProgressHUD 還支持自定義部分進度條相關的屬性.具體細節如下:

@interface MBProgressHUD : UIView/** * HUD完全隱藏后執行的block. */@property (copy) MBProgressHUDCompletionBlock completionBlock;/**  * MBProgressHUD 操作模式. 默認是 MBProgressHUDModeIndeterminate. * * @see MBProgressHUDMode */@property (assign) MBProgressHUDMode mode;/** * HUD顯示和隱藏時使用的動畫類型. * * @see MBProgressHUDAnimation */@property (assign) MBProgressHUDAnimation animationType;/** * HUD處于MBProgressHUDModeCustomView模式時,顯示此自定義視圖(比如一個 UIImageView). * 最好設置自定義視圖寬高為 37x37(這是HUD內建指示器的邊框值). */@property (MB_STRONG) UIView *customView;/**  * HUD代理對象. * * @see MBProgressHUDDelegate */@property (MB_WEAK) id<MBProgressHUDDelegate> delegate;/**  *狀態指示器下可選顯示的短消息.HUD會自動調整文字的尺寸. 如果文字過長,后面會用"..."代替.  */@property (copy) NSString *labelText;/**  * 可選顯示在labelText的細節文字信息.支持多行顯示. */@property (copy) NSString *detailsLabelText;/**  * HUD的不透明度.默認是0.8. */@property (assign) float opacity;/** * HUD的顏色.默認黑色.設置此值后, opacity屬性的值將不再使用,因為顏色也可以設置透明度. */@property (MB_STRONG) UIColor *color;/**  * HUD相對于父視圖中心點的水平偏移量. */@property (assign) float xOffset;/**  * HUD相對于父視圖中心點的垂直偏移量. */@property (assign) float yOffset;/** * HUD邊緣與HUD的元素之間(比如標簽,指示器,自定義視圖等)的空白距離.  * 默認 20.0 */@property (assign) float margin;/** * HUD圓角半徑,默認10.0. */@property (assign) float cornerRadius;/**  * 是否給父視圖添加一個放射線樣式的遮罩層.默認NO. */@property (assign) BOOL dimBackground;/* * 用于指定某個方法執行一段時間之后再顯示HUD,以秒記.如果方法在這段時間之前就執行完成,就不再顯示HUD.  * 這主要是為了優化耗時可能極短的任務的體驗. * 默認值為 0. * 這個屬性僅在可以任務的狀態可以知曉時,才有作用. * @see taskInProgress */@property (assign) float graceTime;/** * HUD顯示的最小時間(以秒記.) * 這可以避免HUD剛一顯示立即又隱藏所帶來的不好的用戶體驗. * 默認是 0. */@property (assign) float minShowTime;/** * 指示被執行的操作是否還在執行. graceTime 屬性依賴于這個屬性. * 如果你沒有設置graceTime(和設置為0.0不同),這個屬性沒有任何作用. * 當使用showWhileExecuting:onTarget:withObject:animated:時,這個值會被自動設置. * 當直接使用show:或hide:等方法顯示或隱藏HUD時,你應該手動設置taskInProgress 屬性的值,以保證 graceTime 能正確發揮作用. */@property (assign) BOOL taskInProgress;/** * HUD隱藏時,是否從父視圖中移除. * 默認 NO.  */@property (assign) BOOL removeFromSuperViewOnHide;/**  * 用于主標簽的字體值. */@property (MB_STRONG) UIFont* labelFont;/** * 主標簽顏色值. */@property (MB_STRONG) UIColor* labelColor;/** * 詳情標簽字體值. */@property (MB_STRONG) UIFont* detailsLabelFont;/**  * 詳情標簽顏色. */@property (MB_STRONG) UIColor* detailsLabelColor;/** * 指示器顏色.默認 [UIColor whiteColor] */@property (MB_STRONG) UIColor *activityIndicatorColor;/**  * 進度指示器的顏色,可選 0.0 ~ 1.0,默認0.0. */@property (assign) float progress;/** * HUD面板的最小尺寸.默認 CGSizeZero. */@property (assign) CGSize minSize;/** *  HUD面板的實際尺存,只讀. *  你可以使用它來限制HUD的可點擊區域. * @see https://github.com/jdg/MBProgressHUD/pull/200 */@property (atomic, assign, readonly) CGSize size;/** * 是否強制設置HUD為正方形,默認NO. */@property (assign, getter = isSquare) BOOL square;@end@protocol MBProgressHUDDelegate <NSObject>@optional/**  * HUD完全從屏幕中隱藏時調用此方法. */- (void)hudWasHidden:(MBProgressHUD *)hud;@end/** * 一個餅狀圖樣式的進圖指示視圖. */@interface MBRoundProgressView : UIView /** * 進度 (0.0 to 1.0) */@property (nonatomic, assign) float progress;/** * 進度指示器顏色.默認 [UIColor whiteColor]. */@property (nonatomic, MB_STRONG) UIColor *progressTintColor;/** * 進度指示的背景部分的顏色. * 默認白色半透(透明度0.1) */@property (nonatomic, MB_STRONG) UIColor *backgroundTintColor;/* * 顯示模式.NO,圓形;YES,環形.默認圓形. */@property (nonatomic, assign, getter = isAnnular) BOOL annular;@end/** * 一個水平進度條視圖.  */@interface MBBarProgressView : UIView/** * 進度 (0.0 to 1.0) */@property (nonatomic, assign) float progress;/** * 進度條邊框線的顏色. * 默認白色 [UIColor whiteColor]. */@property (nonatomic, MB_STRONG) UIColor *lineColor;/** * 進度條背景色. * 默認是 [UIColor clearColor]; */@property (nonatomic, MB_STRONG) UIColor *progressRemainingColor;/** * 進度的顏色. * 默認 [UIColor whiteColor]. */@property (nonatomic, MB_STRONG) UIColor *progressColor;@end

結論

總而言之, 不管你開發什么應用,你總是需要一個MBProgressHUD,而我真的推薦你使用 MBProgressHUD.官方文檔對MBProgressHUD的具體功能提的過于精簡,希望能借助這篇文章,能讓大家一起更全面的認識 MBProgressHUD.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日本国产在线| 欧美巨大黑人极品精男| 91精品国产自产在线老师啪| 午夜精品久久久久久久白皮肤| 久久久久久伊人| 午夜欧美大片免费观看| 国产亚洲精品成人av久久ww| 97人人模人人爽人人喊中文字| 欧美成人亚洲成人| 成人xvideos免费视频| 欧美另类暴力丝袜| 日韩精品在线观看网站| 日韩精品中文字幕在线播放| 91精品视频在线播放| 日韩欧美主播在线| 久久精品亚洲94久久精品| 懂色av一区二区三区| 精品色蜜蜜精品视频在线观看| 亚洲国产福利在线| 青草热久免费精品视频| 国产日本欧美视频| 亚洲精品福利资源站| 97香蕉超级碰碰久久免费的优势| 久久久久日韩精品久久久男男| 精品国产91久久久久久| 国产精品视频在线观看| 日韩性生活视频| 亚洲丁香婷深爱综合| 亚洲激情国产精品| 欧美小视频在线| 欧美影院成年免费版| 国产精欧美一区二区三区| 国产精品视频白浆免费视频| 国产乱人伦真实精品视频| 久久久欧美一区二区| 久久影视电视剧凤归四时歌| 国产欧美久久一区二区| 原创国产精品91| 日av在线播放中文不卡| 亚洲国产另类 国产精品国产免费| 亚洲女在线观看| 91国产精品视频在线| 51视频国产精品一区二区| 亚洲午夜女主播在线直播| 日本免费一区二区三区视频观看| 伊人久久久久久久久久久| 秋霞午夜一区二区| 久久久久久久久国产精品| 亚洲人成绝费网站色www| 欧洲精品久久久| 在线亚洲午夜片av大片| 欧美日韩高清在线观看| 日韩成人在线视频网站| 92看片淫黄大片看国产片| 韩国一区二区电影| 欧美亚洲视频在线观看| 国产精品男女猛烈高潮激情| 中文字幕亚洲在线| 欧美精品video| 欧洲精品久久久| 最近2019年好看中文字幕视频| 国内精品小视频在线观看| 国产精品精品一区二区三区午夜版| 日韩电影网在线| 神马国产精品影院av| 色香阁99久久精品久久久| 成人性生交大片免费观看嘿嘿视频| 亚洲精品v天堂中文字幕| 亚洲精品美女免费| 668精品在线视频| 亚洲欧美综合另类中字| 中文字幕日韩在线观看| 日韩av在线播放资源| 91免费观看网站| 日韩在线观看精品| 97超碰色婷婷| 国产日韩综合一区二区性色av| 国产精品久久久久999| 成人免费淫片aa视频免费| 丝袜一区二区三区| 欧美肥老妇视频| 日韩大片免费观看视频播放| 成人免费观看49www在线观看| 97**国产露脸精品国产| 亚洲一区美女视频在线观看免费| 亚洲人成在线观看| 亚洲va久久久噜噜噜| 国产一区二区三区毛片| 久久久国产一区二区| 精品国产网站地址| 欧美wwwwww| 国产精品视频精品视频| 亚洲国产精彩中文乱码av在线播放| 国产伊人精品在线| 欧美视频中文在线看| 久久91亚洲精品中文字幕| 日韩精品极品在线观看播放免费视频| 日韩一区二区久久久| 国产女精品视频网站免费| 亚洲图中文字幕| 神马久久久久久| 亚洲男人天堂久| 97久久久免费福利网址| 日韩a**站在线观看| 国产在线98福利播放视频| 国产精品7m视频| 精品国内产的精品视频在线观看| 欧美亚洲另类在线| 久久久欧美一区二区| 国产精品视频久久| 亚洲国产精品va在线观看黑人| 日韩电影视频免费| 久久综合亚洲社区| 97免费在线视频| 国产日韩欧美视频在线| 日韩性生活视频| 成人激情视频网| 国产精品免费久久久久影院| 成人妇女淫片aaaa视频| 久久影院在线观看| 久久夜色撩人精品| 日韩av片免费在线观看| 国产精品视频999| 在线观看国产精品淫| 亚洲精品小视频| 亚洲成人精品av| 国产亚洲日本欧美韩国| 国产精品激情av电影在线观看| 精品福利一区二区| 亚洲新中文字幕| 亚洲精品欧美日韩专区| 国产一区二区在线免费视频| 亚洲人成在线观看| 亚洲一区二区三区xxx视频| 欧美丰满片xxx777| 亚洲国产又黄又爽女人高潮的| 亚洲欧美在线第一页| 在线亚洲午夜片av大片| 日韩欧美视频一区二区三区| 原创国产精品91| www.日韩系列| 91av在线免费观看视频| 国产精品一区二区三区久久久| 日韩在线观看免费av| 日韩不卡在线观看| 中文字幕免费精品一区| 成人网页在线免费观看| 77777亚洲午夜久久多人| 欧美亚洲视频一区二区| 91性高湖久久久久久久久_久久99| 亚洲精品一区久久久久久| 国产激情久久久| 九九热在线精品视频| 久久亚洲精品一区二区| 欧美最近摘花xxxx摘花| 一个色综合导航| 日韩欧美aⅴ综合网站发布| 2019最新中文字幕| 日韩成人av一区| 日韩理论片久久| 日本国产一区二区三区| 欧美日韩中文在线观看| 精品国偷自产在线| 亚洲国产97在线精品一区|