自定义组件之ActivityIndicator


看代码:

#import "ZKMyActivityIndicator.h"
#import <QuartzCore/QuartzCore.h>
#import "UIColor+HexColor.h"

@interface ZKMyActivityIndicator ()
{
    CGContextRef _context;
    
    NSTimer * _timer;
    
    CGFloat _startAngle;
    
    CGFloat _endAngle;
    
    NSInteger _speed;
}
@end

@implementation ZKMyActivityIndicator

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
 */


- (void)drawRect:(CGRect)rect {
    // Drawing code
    
    self.backgroundColor = [UIColor whiteColor];
    
    if (_timer == nil) {
        
        _speed = 1;
        
        NSDate * fireDate = [NSDate date];
        
        _timer = [[NSTimer alloc] initWithFireDate:fireDate interval:0.01 target:self selector:@selector(timerAction) userInfo:nil repeats:YES];
        
        [[NSRunLoop mainRunLoop] addTimer:_timer forMode:NSDefaultRunLoopMode];
        
    }
    
    if (_context == nil) {
        
        _context = UIGraphicsGetCurrentContext();
        
        _startAngle = 90 * (M_PI/180);
        
        _endAngle = 60 * (M_PI/180);
        
    }
    
    
    CGContextSetLineWidth(_context, 2.0);
    
    CGContextSetStrokeColorWithColor(_context, [UIColor colorWithHexString:@"00ACED"].CGColor);
    
    CGContextAddArc(_context, rect.origin.x + rect.size.width/2, rect.origin.y + rect.size.height/2, 45, _startAngle, _endAngle, 1);
    
    CGContextStrokePath(_context);
    
}


- (void) timerAction {
    
    //度数大了就减一圈,免得_startAngle和_endAngle一直增加,最后溢出
    if (_startAngle >= 360 * (M_PI/180) || _endAngle >= 360 * (M_PI/180)) {
        
        _startAngle -= 360 * (M_PI/180);
        
        _endAngle -= 360 * (M_PI/180);
        
    }
    
    
    
    //动画开始时,起始位置速度大于尾巴速度,  我这里比较省事儿,你做的时候,可以把这两个速度定义为常量,或者通过属性传入
    //开始位置快追上尾巴时,就让开始位置速度和尾巴速度互换
    if ((_startAngle - _endAngle) > (330 * (M_PI/180)) || _speed == 2) {
        
        _startAngle += 1 * (M_PI/180);
        
        _endAngle += 2 * (M_PI/180);
        
        _speed = 2;
        
    }
    
    //_speed == 1时,开始位置速度 > 尾巴速度
    //_speed == 2时,开始位置速度 < 尾巴速度
    //其实这个_speed就是个标志位
    
    //尾巴快追上开始位置时,再次互换,就这样,循环
    if ((_startAngle - _endAngle) < (30 * (M_PI/180)) || _speed == 1) {
        
        _startAngle += 2 * (M_PI/180);
        
        _endAngle += 1 * (M_PI/180);
        
        _speed = 1;
        
    }
    
    //相信上面的画弧难不倒你
    
    [self setNeedsDisplay];
    
}


特别说明,

#import "UIColor+HexColor.h"

这个头文件不是系统的,你可以不用这个设置颜色的方式。

直接拷贝代码肯定运行不了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值