Рисование полого круга в iPhone
Мне нужно нарисовать следующее изображение ![enter image description here]()
Серая часть - это то, что я хочу нарисовать над другим изображением, что такое код, который мне нужно использовать с использованием методов CGContext, я попытался использовать CGContextAddArc, но не смог, потому что, когда я заполняю штрих, центральная пустота также заполняется серой текстурой.
Любая помощь была оценена.
Информация: у меня есть полное синее изображение, мне нужно добавить полукруг над синим изображением
Спасибо
Ответы
Ответ 1
Продолжая работать над тем, что Оле Бегеманн упомянул в своем ответе и некоторых модификациях, я смог выполнить это требование.
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(context, [UIColor colorWithPatternImage:[UIImage imageNamed:@"background_grey_pattern.png"]].CGColor);
CGMutablePathRef path = CGPathCreateMutable();
CGContextSetLineWidth(context, 40);
CGPathAddArc(path, NULL, aRect.size.width/2, aRect.size.height/2, 45, 0*3.142/180, angle*3.142/180, 0);
CGContextAddPath(context, path);
CGContextStrokePath(context);
CGPathRelease(path);
Поэтому вместо 2 дуг я использовал только одну и поглаживал ее с большей шириной.
Ответ 2
Посмотрите Заполнение пути в документации Core Graphics. В основном, что вы делаете, добавьте две дуги к вашему пути (внешнюю и внутреннюю), а затем используйте правила заполнения Core Graphics в ваших интересах. Код будет выглядеть примерно так:
CGMutablePathRef path = CGPathCreateMutable();
// Add the outer arc to the path (as if you wanted to fill the entire circle)
CGPathMoveToPoint(path, ...);
CGPathAddArc(path, ...);
CGPathCloseSubpath(path);
// Add the inner arc to the path (later used to substract the inner area)
CGPathMoveToPoint(path, ...);
CGPathAddArc(path, ...);
CGPathCloseSubpath(path);
// Add the path to the context
CGContextAddPath(context, path);
// Fill the path using the even-odd fill rule
CGContextEOFillPath(context);
CGPathRelease(path);
Ответ 3
Это тангенциальное, но относительное. Здесь мой Swift код для рисования (или полый круг).
class func drawDonut(donutColor: UIColor, rect: CGRect, innerDonutProportion: CGFloat) {
//// Variable Declarations
let innerDonutSide: CGFloat = rect.size.width * innerDonutProportion
let innerDonutOffset: CGFloat = 0.5 * (rect.size.width - innerDonutSide)
let innerDonutRect = CGRectMake(innerDonutOffset, innerDonutOffset, innerDonutSide, innerDonutSide)
//// InnerCircle Drawing
let innerCirclePath = UIBezierPath(ovalInRect: innerDonutRect)
//// Outer Circle Drawing
let outerCirclePath = UIBezierPath(ovalInRect: rect)
// Clip out the innerCirclePath
outerCirclePath.appendPath(innerCirclePath)
outerCirclePath.addClip()
outerCirclePath.usesEvenOddFillRule = true;
// and Fill the outerCircle
donutColor.setFill()
outerCirclePath.fill()
}