SVProgressHUD的使用
SVProgressHUD相信在很多项目中都有运用,运用于弹出窗提示效果;
地址:https://github.com/SVProgressHUD/SVProgressHUD
1.1 首先SVProgressHUD是一个单例([SVProgressHUD method]),所以可以使用起来也相当方便跟简单,可以写在任意位置;但必须在主线程中进行显示,或则会报闪退;也可以用于显示一个提示信息。所述显示时间取决于给定的字符串的长度( 0.5至5秒)
其中几种展现:
+ (void)showInfoWithStatus:(NSString *)string;
+ (void)showSuccessWithStatus:(NSString*)string;
+ (void)showErrorWithStatus:(NSString *)string;
+ (void)showImage:(UIImage*)image status:(NSString*)string;
+ (void)showProgress:(float)progress status:(NSString*)status;
简单HUD销毁:
+ (void)dismiss;
+ (void)dismissWithDelay:(NSTimeInterval)delay;
+ (void)dismissWithCompletion:(SVProgressHUDDismissCompletion)completion;
+ (void)dismissWithDelay:(NSTimeInterval)delay completion:(SVProgressHUDDismissCompletion)completion;
批量HUD销毁
+ (void)popActivity;
1.2 SVProgressHUD可通过下列方法进行个性化定制:
+ (void)setDefaultStyle:(SVProgressHUDStyle)style; // 默认是SVProgressHUDStyleLight
+ (void)setDefaultMaskType:(SVProgressHUDMaskType)maskType; // 默认是SVProgressHUDMaskTypeNone
+ (void)setDefaultAnimationType:(SVProgressHUDAnimationType)type; // 默认是 SVProgressHUDAnimationTypeFlat
+ (void)setRingThickness:(CGFloat)width; // 默认是 2 pt
+ (void)setCornerRadius:(CGFloat)cornerRadius; // 默认是 14 pt
+ (void)setFont:(UIFont*)font; // 默认是 [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline]
+ (void)setForegroundColor:(UIColor*)color; // 默认是 [UIColor blackColor], 仅对 SVProgressHUDStyleCustom 有效
+ (void)setBackgroundColor:(UIColor*)color; // 默认是 [UIColor whiteColor], 仅对 SVProgressHUDStyleCustom 有效
+ (void)setInfoImage:(UIImage*)image; //默认是bundle文件夹中的提示图片.
+ (void)setSuccessImage:(UIImage*)image; // 默认是bundle文件夹中的成功图片.
+ (void)setErrorImage:(UIImage*)image; // 默认是bundle文件夹中的错误图片.
+ (void)setViewForExtension:(UIView*)view; // 默认是nil,仅当设置了 #define SV_APP_EXTENSIONS 时有效.
所以我们可以对于SVProgressHUD做一些调整,比如图标跟文字的显示,背景色等;已经是相当的灵活;
1.3 SVProgressHUD带的四个通知,通过NSNotificationCenter 注册4份通知,以响应正在显示/消失:
SVProgressHUDWillAppearNotification 提示框即将出现
SVProgressHUDDidAppearNotification 提示框已经出现
SVProgressHUDWillDisappearNotification 提示框即将消失
SVProgressHUDDidDisappearNotification 提示框已经消失
每个通知传递一个userInfo字典,字典中包含HUD的状态字符串(如果有的话) ,可通过SVProgressHUDStatusUserInfoKey作为键来获取。
SVProgressHUD还发送通知:
SVProgressHUDDidReceiveTouchEventNotification当用户触摸整体屏幕上 和
’ SVProgressHUDDidTouchDownInsideNotification当用户直接在HUD接触。这两个通知没有 userInfo参数,但包含了有关的触摸的UIEvent` 参数.
实例:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleNotification:)
name:SVProgressHUDWillAppearNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleNotification:)
name:SVProgressHUDDidAppearNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleNotification:)
name:SVProgressHUDWillDisappearNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleNotification:)
name:SVProgressHUDDidDisappearNotification
object:nil];
}
- (void)handleNotification:(NSNotification *)notification {
NSLog(@"Notification recieved: %@", notification.name);
NSLog(@"Status user info key: %@", notification.userInfo[SVProgressHUDStatusUserInfoKey]);
}
输出的内容为,其中Useful Information为提示的文本内容:
SVProgressHUD[793:34162] Notification recieved: SVProgressHUDWillAppearNotification
2016-06-09 21:00:13.285 SVProgressHUD[793:34162] Status user info key: Useful Information.
1.4 相关属性介绍
1.4.1 SVProgressHUDAnimationType 动作类型
[SVProgressHUD setDefaultAnimationType:SVProgressHUDAnimationTypeFlat]; 圆圈的转动动作
[SVProgressHUD setDefaultAnimationType:SVProgressHUDAnimationTypeNative]; 菊花型的转动动作
1.4.2 SVProgressHUDMaskType 弹出窗后面的背景效果类型:
SVProgressHUDMaskTypeNone : 当提示显示的时间,用户仍然可以做其他操作,比如View 上面的输入等
SVProgressHUDMaskTypeClear : 用户不可以做其他操作
SVProgressHUDMaskTypeBlack : 用户不可以做其他操作,并且背景色是黑色
SVProgressHUDMaskTypeGradient : 用户不可以做其他操作,并且背景色是渐变的
除了插件自带的几种效果,还可以自定义背景色的效果
[SVProgressHUD setBackgroundLayerColor:[[UIColor redColor] colorWithAlphaComponent:0.4]];
[SVProgressHUD setDefaultMaskType:SVProgressHUDMaskTypeCustom];
1.4.3 SVProgressHUDStyle 弹出窗的样式
[SVProgressHUD setDefaultStyle:SVProgressHUDStyleLight]; 窗的背景块是白色,字跟圆圈是黑色
[SVProgressHUD setDefaultStyle:SVProgressHUDStyleDark]; 窗的背景块是黑色,字跟圆圈是白色
若要自定义必须先设setDefaultStyle为SVProgressHUDStyleCustom,再进行setForegroundColor,setBackgroundColor的配置.
1.5:相关代码
1.5.1 SVProgressHUD消息的时间
+ (NSTimeInterval)displayDurationForString:(NSString*)string {
return MAX((float)string.length * 0.06 + 0.5, [self sharedView].minimumDismissTimeInterval);
}
设置一个最大值,至少是0.5秒,其它时间按提示的文本字数长度决定;
1.5.2 设定某个效果不影响全局属性
+ (void)showSuccessWithStatus:(NSString*)status maskType:(SVProgressHUDMaskType)maskType {
SVProgressHUDMaskType existingMaskType = [self sharedView].defaultMaskType;
[self setDefaultMaskType:maskType];
[self showSuccessWithStatus:status];
[self setDefaultMaskType:existingMaskType];
}
首先保存全局的效果值,然后显示当前的效果,完成后又把当前的效果值换成刚才的全局效果,这样就可以兼容全局效果跟本次效果的转换;
1.5.3通知并传递内容
创建消息通知:
[[NSNotificationCenter defaultCenter] postNotificationName:SVProgressHUDDidReceiveTouchEventNotification
object:self
userInfo:[self notificationUserInfo]];
//传递的内容:
- (NSDictionary*)notificationUserInfo{
return (self.statusLabel.text ? @{SVProgressHUDStatusUserInfoKey : self.statusLabel.text} : nil);
}
把当前提示的内容传递给通知,方便后面在接收到消息时可以做处理;