このような単純な形状の場合は、CoreGraphics を使用して正方形と円を描画するだけで、実装に塗りつぶしの色を設定する機能が追加されます。
白黒だけの場合、色の表現がわかっていれば、白を別の色に変更することはそれほど難しくありません。残念ながら、これは記述して実行するのがより複雑になるため、概説した単純なタスクについては、CoreGraphics に直接アクセスすることをお勧めします (駄洒落、申し訳ありません)。
ここに簡単なデモがあります:
static void InsetRect(CGRect* const pRect, const CGFloat pAmount) {
const CGFloat halfAmount = pAmount * 0.5f;
*pRect = CGRectMake(pRect->origin.x + halfAmount, pRect->origin.y + halfAmount, pRect->size.width - pAmount, pRect->size.height - pAmount);
}
static void DrawBorderedCircleWithWidthInContext(const CGRect pRect, const CGFloat pWidth, CGContextRef pContext) {
CGContextSetLineWidth(pContext, pWidth);
CGContextSetShouldAntialias(pContext, true);
CGRect r = pRect;
/* draw circle's border */
CGContextSetRGBStrokeColor(pContext, 0.8f, 0.7f, 0, 1);
InsetRect(&r, pWidth);
CGContextStrokeEllipseInRect(pContext, r);
/* draw circle's fill */
CGContextSetRGBFillColor(pContext, 0, 0, 0.3f, 1);
InsetRect(&r, pWidth);
CGContextFillEllipseInRect(pContext, r);
}