我创建了一个循环加载器(用于学习目的),以百分比显示完成了多少工作。这比实际使用更多的是学习经验(我知道git上的一些lib已经做了这件事)。但是现在我想动画百分比的变化,而不是立刻做这个,这就是我目前的做法。
这是我的代码:
- (instancetype)initWithFrame:(CGRect)frame
{
if (self == [super initWithFrame:frame]) {
_percent = 0.0f;
}
return self;
}
- (void)drawRect:(CGRect)rect
{
[self drawLoaderWithFrame:rect percent:_percent];
}
- (void) setPercent:(CGFloat)percent {
_percent = percent / 100.f;
[self setNeedsDisplay];
}
- (void)drawLoaderWithFrame:(CGRect)frame percent:(CGFloat)percent;
{
//// Color Declarations
UIColor* front = [UIColor colorWithRed: 1 green: 1 blue: 1 alpha: 1];
//// Variable Declarations
CGFloat angle = -360 * percent;
if (_percent != 0.f) {
CGRect oval2Rect = CGRectMake(CGRectGetMinX(frame) + floor(CGRectGetWidth(frame) * 0.11000 + 0.5), CGRectGetMinY(frame) + floor((CGRectGetHeight(frame) - 78) * 0.50000 + 0.5), floor(CGRectGetWidth(frame) * 0.89000 + 0.5) - floor(CGRectGetWidth(frame) * 0.11000 + 0.5), 78);
UIBezierPath* oval2Path = UIBezierPath.bezierPath;
[oval2Path addArcWithCenter: CGPointMake(CGRectGetMidX(oval2Rect), CGRectGetMidY(oval2Rect)) radius: CGRectGetWidth(oval2Rect) / 2 startAngle: 270 * M_PI/180 endAngle: -(angle + 90) * M_PI/180 clockwise: YES];
[oval2Path addLineToPoint: CGPointMake(CGRectGetMidX(oval2Rect), CGRectGetMidY(oval2Rect))];
[oval2Path closePath];
[front setFill];
[oval2Path fill];
}
}
我尝试使用延迟的while循环,但没有运气它仍然立即执行。