12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- //
- // SDWaitingView.m
- // SDPhotoBrowser
- //
- // Created by aier on 15-2-6.
- // Copyright (c) 2015年 GSD. All rights reserved.
- //
- #import "SDWaitingView.h"
- //// 图片下载进度指示器背景色
- //#define SDWaitingViewBackgroundColor [UIColor colorWithRed:0 green:0 blue:0 alpha:0.7]
- //
- //// 图片下载进度指示器内部控件间的间距
- //
- //#define SDWaitingViewItemMargin 10
- @implementation SDWaitingView
- - (id)initWithFrame:(CGRect)frame
- {
- self = [super initWithFrame:frame];
- if (self) {
- self.backgroundColor = SDWaitingViewBackgroundColor;
- self.layer.cornerRadius = 5;
- self.clipsToBounds = YES;
- self.mode = SDWaitingViewModeLoopDiagram;
- }
- return self;
- }
- - (void)setProgress:(CGFloat)progress
- {
- _progress = progress;
- [self setNeedsDisplay];
- if (progress >= 1) {
- [self removeFromSuperview];
- }
- }
- - (void)drawRect:(CGRect)rect
- {
- CGContextRef ctx = UIGraphicsGetCurrentContext();
-
- CGFloat xCenter = rect.size.width * 0.5;
- CGFloat yCenter = rect.size.height * 0.5;
- [[UIColor whiteColor] set];
-
- switch (self.mode) {
- case SDWaitingViewModePieDiagram:
- {
- CGFloat radius = MIN(rect.size.width * 0.5, rect.size.height * 0.5) - SDWaitingViewItemMargin;
-
-
- CGFloat w = radius * 2 + SDWaitingViewItemMargin;
- CGFloat h = w;
- CGFloat x = (rect.size.width - w) * 0.5;
- CGFloat y = (rect.size.height - h) * 0.5;
- CGContextAddEllipseInRect(ctx, CGRectMake(x, y, w, h));
- CGContextFillPath(ctx);
-
- [SDWaitingViewBackgroundColor set];
- CGContextMoveToPoint(ctx, xCenter, yCenter);
- CGContextAddLineToPoint(ctx, xCenter, 0);
- CGFloat to = - M_PI * 0.5 + self.progress * M_PI * 2 + 0.001; // 初始值
- CGContextAddArc(ctx, xCenter, yCenter, radius, - M_PI * 0.5, to, 1);
- CGContextClosePath(ctx);
-
- CGContextFillPath(ctx);
- }
- break;
-
- default:
- {
- CGContextSetLineWidth(ctx, 15);
- CGContextSetLineCap(ctx, kCGLineCapRound);
- CGFloat to = - M_PI * 0.5 + self.progress * M_PI * 2 + 0.05; // 初始值0.05
- CGFloat radius = MIN(rect.size.width, rect.size.height) * 0.5 - SDWaitingViewItemMargin;
- CGContextAddArc(ctx, xCenter, yCenter, radius, - M_PI * 0.5, to, 0);
- CGContextStrokePath(ctx);
- }
- break;
- }
- }
- @end
- // 版权属于原作者
- // http://code4app.com (cn) http://code4app.net (en)
- // 发布代码于最专业的源码分享网站: Code4App.com
|