iOS系统提供的加载等待控件UIActivityIndicatorView(传说中的菊花), 有时候难免有点单调生涩. 故在此简单封装了一下:
#import <UIKit/UIKit.h>
#define kSideWidth 80
#define kSideHeight 80
#define kCornerRadius 5
#define kLoadingTime 5
#define kTips "数据努力加载中"
#define kTipsTimeInterval 0.5
typedef void (^failedBlock)(void);
typedef NS_ENUM(NSInteger, MHPopViewType) {
MHPopViewTypeFullScreen,
MHPopViewTypeWrapContent,
MHPopViewTypeFullScreenWithTips,
MHPopViewTypeWrapContentWithTips,
MHPopViewTypeTips,
};
@interface MHProgress : UIView
- (instancetype)initWithType:(MHPopViewType)type;
- (instancetype)initWithType:(MHPopViewType)type failedBlock:failedBlock;
- (void)showLoadingView;
- (void)closeLoadingView;
- (void)showTips:(NSString *)tips intInterval:(CGFloat)timeInterval;
@end
MHPopViewType:
还有两种就是只显示菊花, 没有提示的文字.
提供的接口也很简单, 初始化的时候带上定义好的type就OK, 然后就是对应的显示方法, 不用解释, 字面意思就够了.
需要注意的一点是, 有个init方法会有传入一个空得Block, 这个Block中的代码块是在规定显示时间(kLoadingTime)显示完之后执行的. 举个栗子吧:
在进行网络请求数据之前, 为了阻止用户对UI的操作, 定义一个MHProgress, 然后把它show出来. 当网络数据请求过来的时候, 就可以close掉它. 但这只是理想情况, 当网络状况不是很好地时候, 这个时候就不能让它一直show着, 一般采取的做法是, 给它了固定的显示时间(kLoadingTime), 超出这个时间就可以假定网络请求"失败"了. 这时, 对"失败"情况的处理就各取所需了, 可以AlertView一下, 也可以showtips一下. 这些处理就可以在Block中进行.
目前封装的还有些问题, 比如在实例化一个实例之后, 先对它进行showLoading操作, 再进行showTips操作, 这个时候显示就会有问题. 因为是同一个实例, 在实现的时候会对全局变量有更改, 所以只能定义两个实例, 对这两个操作分开进行. 这点读者也可以进行改善.