// // ArcToCircleLayer.m // iCemarose // // Created by HouWeiBin on 2017/1/24. // Copyright © 2017年 kollway. All rights reserved. // #import "ArcToCircleLayer.h" #import "UIColor+SAMAdditions.h" static CGFloat const kLineWidth = 1.2; @implementation ArcToCircleLayer @dynamic progress; + (BOOL)needsDisplayForKey:(NSString *)key { if ([key isEqualToString:@"progress"]) { return YES; } return [super needsDisplayForKey:key]; } - (void)drawInContext:(CGContextRef)ctx { UIBezierPath *path = [UIBezierPath bezierPath]; CGFloat radius = MIN(CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds)) / 2 - kLineWidth / 2; CGPoint center = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds)); // O // CGFloat originStart = M_PI * 7 / 2; // CGFloat originEnd = M_PI * 2; // CGFloat currentOrigin = originStart - (originStart - originEnd) * self.progress; CGFloat originStart = M_PI * 5; CGFloat originEnd = M_PI * 1; CGFloat currentOrigin = originStart - (originStart - originEnd) * (1-cosf(M_PI*self.progress/2)); if(self.progress<0){ currentOrigin = originStart; } // D // CGFloat destStart = M_PI * 3; // CGFloat destEnd = 0; // CGFloat currentDest = destStart - (destStart - destEnd) * self.progress; CGFloat destStart = M_PI * 5; CGFloat destEnd = M_PI * 1; CGFloat currentDest = destStart - (destStart - destEnd) * self.progress; [path addArcWithCenter:center radius:radius startAngle: currentOrigin endAngle:currentDest clockwise:NO]; CGContextAddPath(ctx, path.CGPath); CGContextSetLineWidth(ctx, kLineWidth); // CGContextSetStrokeColorWithColor(ctx, [UIColor blueColor].CGColor); //EF8891 CGContextSetStrokeColorWithColor(ctx, [UIColor sam_colorWithHex:@"EF8891"].CGColor); CGContextStrokePath(ctx); } @end