你基本上只需要構造一個路徑定義要填充的區域(例如使用CGPathAddArc
),使用CGContextClip
將圖形上下文剪切到該路徑,然後繪製圖像。
這裏有一個drawRect:
方法,你可以在自定義視圖中使用的例子:
- (void)drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGFloat progress = 0.7f; //This would be a property of your view
CGFloat innerRadiusRatio = 0.5f; //Adjust as needed
//Construct the path:
CGMutablePathRef path = CGPathCreateMutable();
CGFloat startAngle = -M_PI_2;
CGFloat endAngle = -M_PI_2 + MIN(1.0f, progress) * M_PI * 2;
CGFloat outerRadius = CGRectGetWidth(self.bounds) * 0.5f - 1.0f;
CGFloat innerRadius = outerRadius * innerRadiusRatio;
CGPoint center = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds));
CGPathAddArc(path, NULL, center.x, center.y, innerRadius, startAngle, endAngle, false);
CGPathAddArc(path, NULL, center.x, center.y, outerRadius, endAngle, startAngle, true);
CGPathCloseSubpath(path);
CGContextAddPath(ctx, path);
CGPathRelease(path);
//Draw the image, clipped to the path:
CGContextSaveGState(ctx);
CGContextClip(ctx);
CGContextDrawImage(ctx, self.bounds, [[UIImage imageNamed:@"RadialProgressFill"] CGImage]);
CGContextRestoreGState(ctx);
}
爲了簡單起見,我已經硬編碼了一些東西 - 你顯然需要增加一個屬性progress
並在設置者中呼叫setNeedsDisplay
。這也假定您的項目中有一個名爲RadialProgressFill
的圖像。
下面是什麼,將大致看起來像一個例子:
我希望你有一個更好看的背景圖片。 ;)
來源
2013-05-14 17:23:00
omz
因此,它是掩蓋或畫一個「彩虹」像漸變,阻止你?還是把這兩塊拼在一起? – 2013-05-11 15:28:36
我可能不清楚,對不起 - 我不想繪製漸變,我在Photoshop中製作的進度條有一個很好的漸變圓形填充,我只需要掩飾它,所以它是填寫進度條。你懂我的意思嗎? :) – 2013-05-11 16:09:06