(一)自己动手写代码之PZLoadingButton

实现一个简单的button 先给出github链接

效果:
效果图
需求:

点击,隐藏button上文字,将显示一个菊花,表示正在处理网络请求或者其他任务
再次点击,显示button文字,菊花停止转动,恢复最初状态

主要一下几个步骤:
  • 创建一个button的子类
  • 给button添加一个UIActivityIndicatorView(俗称菊花)
  • 在特定的时机,开启关闭旋转

代码:

创建button子类,PZLoadingButton
#import
@interface PZLoadingButton : UIButton
- (void)startLoading;
- (void)stopLoading;
@end

需要两个接口,一个开始loading,一个停止loading

具体实现如下:
@property (nonatomic, strong) UIActivityIndicatorView * indecator;
- (void)startLoading {
    self.titleLabel.alpha = 0;
    [self.indecator startAnimating];
}
- (void)stopLoading {
    self.titleLabel.alpha = 1;
    [self.indecator stopAnimating];
}

那我们在button创建的时候将UIActivityIndicatorView添加到button上,添加button要考虑以下情况:

  1. 使用xib或storyboard + autolayout
    xib和 autolayout拖控件方式会调用- (id)initWithCoder:(NSCoder *)aDecoder方法
  2. 使用代码 + frame
    纯代码使用便利构造器+ (id)buttonWithType:(UIButtonType)buttonType会调用- (instancetype)initWithFrame:(CGRect)frame方法

分别对应以下两种初始化方法:
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
[self commentInit];
[self setupConstrains];
}
return self;
}
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self commentInit];
[self setupConstrains];

    }
    return self;
}

因为创建的菊花默认状态下是显示的,- (void)commentInit方法主要功能就是将其隐藏。
- (void)commentInit {
self.indecator.hidden = YES;
self.indecator.userInteractionEnabled = NO;
self.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
self.contentHorizontalAlignment =UIControlContentHorizontalAlignmentCenter;
}

- (void)setupConstrains {
    //X方向居中
    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.indecator attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]];
    //Y方向居中
    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.indecator attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterY multiplier:1 constant:0]];
    //宽25
    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.indecator attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:0 multiplier:1 constant:25]];
    //高25
    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.indecator attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:0 multiplier:1 constant:25]];
}

到此为止,详细功能见代码

你可能感兴趣的:((一)自己动手写代码之PZLoadingButton)