// // XHRefreshCircleView.m // MessageDisplayExample // // Created by 曾 宪华 on 14-6-6. // Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. // #import "XHRefreshCircleView.h" @implementation XHRefreshCircleView - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { _heightBeginToRefresh = 50; _offsetY = 0; self.backgroundColor = [UIColor clearColor]; } return self; } + (CABasicAnimation*)repeatRotateAnimation { CABasicAnimation *rotateAni = [CABasicAnimation animationWithKeyPath: @"transform.rotation.z"]; rotateAni.duration = 0.25; rotateAni.cumulative = YES; rotateAni.removedOnCompletion = NO; rotateAni.fillMode = kCAFillModeForwards; rotateAni.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; rotateAni.toValue = [NSNumber numberWithFloat:M_PI / 2]; rotateAni.repeatCount = MAXFLOAT; return rotateAni; } - (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetStrokeColorWithColor(context, [UIColor colorWithRed:173 / 255.0 green:53 / 255.0 blue:60 / 255.0 alpha:1].CGColor); CGContextSetLineWidth(context, 1.f); static CGFloat radius = 9; if (!_isRefreshViewOnTableView) { static CGFloat startAngle = M_PI / 2; CGFloat endAngle = (ABS(_offsetY) / _heightBeginToRefresh) * (M_PI * 19 / 10) + startAngle; CGContextAddArc(context, CGRectGetWidth(self.frame) / 2, CGRectGetHeight(self.frame) / 2, radius, startAngle, endAngle, 0); } else { static CGFloat startAngle = 3 * M_PI / 2.0; CGFloat endAngle = (ABS(_offsetY) / _heightBeginToRefresh) * (M_PI * 19 / 10) + startAngle; CGContextAddArc(context, CGRectGetWidth(self.frame) / 2, CGRectGetHeight(self.frame) / 2, radius, startAngle, endAngle, 0); } CGContextDrawPath(context, kCGPathStroke); } @end