如何获取一个饼状进度条

4

我喜欢Xcode中的小型饼状进度条,当在项目中搜索字符串(Shift-Command-F)时,可以看到图片。

如何在iOS上调用它?我希望在下载队列中使用它。

提前感谢。

Xcode在项目中搜索字符串的屏幕截图

5个回答

6

没有现成的循环确定进度视图。以下是一个drawRect:示例,您可以使用它来实现这样的视图。

- (void)drawRect:(CGRect)rect
{
    CGFloat circleRadius = (self.bounds.size.width / 2) - (self.strokeWidth * 2);
    CGPoint circleCenter = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect));
    CGRect circleRect = CGRectMake(circleCenter.x - circleRadius, circleCenter.y - circleRadius, 2 * circleRadius, 2 * circleRadius);

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);

    // Draw stroked circle to delineate circle shape.

    CGContextSetStrokeColorWithColor(context, self.fillColor.CGColor);
    CGContextSetLineWidth(context, self.strokeWidth);
    CGContextAddEllipseInRect(context, circleRect);
    CGContextStrokePath(context);

    // Draw filled wedge (clockwise from 12 o'clock) to indicate progress

    self.progress = MIN(MAX(0.0, self.progress), 1.0);

    CGFloat startAngle = -M_PI_2;
    CGFloat endAngle = startAngle + (progress * 2 * M_PI);

    CGContextSetFillColorWithColor(context, self.fillColor.CGColor);
    CGContextMoveToPoint(context, circleCenter.x, circleCenter.x);
    CGContextAddLineToPoint(context, CGRectGetMidX(circleRect), CGRectGetMinY(circleRect));
    CGContextAddArc(context, circleCenter.x, circleCenter.y, circleRadius, startAngle, endAngle, NO);
    CGContextClosePath(context);
    CGContextFillPath(context);

    CGContextRestoreGState(context);
}

您需要创建strokeWidthfillColor属性才能直接使用此代码,但这应该是一个开始。这里有一个带有几个示例的样品项目。


很遗憾,这个无法进行动画处理... 我目前正在努力解决这个问题。 - Julian F. Weinert
1
虽然你可以将其转换为使用自定义动画操作绘制到CALayer中的进度属性,但这是真实的。对于读者来说,这绝对是一个有趣的练习。 - warrenm
就是我昨天所做的事情 :) - Julian F. Weinert

3
也许你可以使用来自MBProgressHUD的代码,在某种程度上有一个更大的饼状图。

3
我不认为iOS已发布此类UIProgressView,但你可以自己创建。要将事物放在文本视图的右侧,请使用rightView属性(不要忘记设置rightViewMode)。
你可以为此创建一个自定义UIView(我怀疑它值得尝试来子类化UIProgressView)。我可能会用drawRect手绘它,而不是尝试使用任何图片或其他东西。这样更容易填充正确的百分比。


2

1

试一下这个:LSPieProgressView

它是一个UIView类别,可以在任何UIView上显示一个饼图进度覆盖层。

代码示例:

#import "UIView+LSPieProgress.h"

- (void)updateProgress
{
    [self.button setProgress:self.progress];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接