点击按钮的同时为了是用户更加直接的看到正在执行的进度的变化或者正在执行的进程的状态,通常会在按钮上添加一个活动指示器来告诉用户
但是为了不影响UIbutton的使用可以使用类别增加方法属性
#import <UIKit/UIKit.h>
typedef enum : NSInteger {
UIButtonIndicatorAnimationTypeDefault,
UIButtonIndicatorAnimationTypeRound,
} UIButtonIndicatorAnimationType;
typedef enum : NSInteger {
UIButtonIndicatorPositionRight, // default
UIButtonIndicatorPositionCenter,
UIButtonIndicatorPositionLeft
} UIButtonIndicatorPosition;
@interface UIButton (Indicator)
/// 可用 default round, 默认是系统的indicator,
@property(nonatomic,assign)UIButtonIndicatorAnimationType kk_animationType;
/// 可用 right,center,left
@property(nonatomic,assign)UIButtonIndicatorPosition kk_position;
// 相对于titleLable 右侧/左侧偏移量 默认 10
@property(nonatomic,assign)NSNumber * kk_xOffset;
/// 默认 0
@property(nonatomic,assign)NSNumber * kk_yOffset;
/// 默认1
@property(nonatomic,assign)NSNumber * kk_zoomScale;
/// 是否是正在动画
@property(nonatomic,assign)BOOL kk_animating;
/// 当使用默认的动画类型。动画图为 UIActivityIndicatorView
@property(nonatomic,strong,readonly)UIActivityIndicatorView * indicatorView;
-(void)startIndicatorAnimation;
-(void)stopIndicatorAnimation;
-(void)startIndicatorAnimation:(void(^)())didBegin;
-(void)stopIndicatorAnimationCompletion:(void(^)())completion;
@end
#import "UIButton+Indicator.h"
#import <objc/runtime.h>
@interface UIButton (KKIndictorTitles)
// 保存之前的titles
@property(nonatomic,strong)NSMutableDictionary * dicTitles;
@end
@implementation UIButton (KKIndictorTitles)
-(void)setDicTitles:(NSMutableDictionary *)dicTitles{
objc_setAssociatedObject(self, @"dicTitles", dicTitles, OBJC_ASSOCIATION_RETAIN);
}
-(NSMutableDictionary *)dicTitles{
NSMutableDictionary * dic = objc_getAssociatedObject(self, @"dicTitles");
if (!dic) {
dic = [[NSMutableDictionary alloc]init];
self.dicTitles = dic;
}
return dic;
}
@end
@implementation UIButton (Indicator)
-(