基本的に、0〜100の値に一致する破線の円を作成したい. 異なる 10 ポイントの増分を表す 10 の異なる画像を取得したくありません。どうすればいいですか?
このようなもの
私は iOS や Objective-C に慣れていませんが、概念は普遍的です。
円上の任意の点の位置は として記述できますsin(angle)*radius,cos(angle)*radius
。したがって、次の概念 (疑似コード) に従って、このような円を自分で描くことができます。
drawCircle(radius, borderWidth, dashDensity)
{
int numberOfDashes = radius / dashDensity);
float radsPerDash = pi * 2 / numberOfDashes;
float innerRadius = radius - (borderWidth / 2);
float outerRadius = radius + (borderWidth / 2);
for(float angle = 0; angle < pi * 2; angle += radsPerDash)
DrawLine(sin(angle)*innerRadius, cos(angle)*innerRadius,
sin(angle)*outerRadius, cos(angle)*outerRadius);
}
ここから好きなように見えるはずです。dashDensity
もちろん、魔法の定数を使用してから自動的に計算radius
し、太いダッシュに適していると思われる線幅を使用することもできます。
半円 (たとえば、85% が塗りつぶされている) の場合、ループの終了条件を変更します。
for(float angle = 0; angle < (pi * 2 * 0.85); angle += radsPerDash)
UIView のカスタム サブクラスを作成します。
drawRect をオーバーライドします。
その中で、次の関数を使用します。
これらの関数のドキュメントを参照すると、必要な関数への相互参照がすぐに見つかります。
ここでrtmと言って申し訳ありませんが、実行してください。と で円を作成しCGPathCreateMutable
、CGPathAddArc
を使用しますCGPathCreateCopyByDashingPath
。終わり。