я рисую эллипс
CGRect paperRect = self.bounds;
CGRect strokeRect = CGRectInset(paperRect, 5.0, 5.0);
CGContextAddEllipseInRect(context, strokeRect);
CGContextStrokePath(context);
Я надеялся изменить это на искривленный эллипс (см. рис.). В поисках лучшего способа сделать это мне было интересно, есть ли способ использовать
setLineDash:count:phase:
и передать дугу/кривую как шаблон вместо линии? Или есть лучший способ сделать это?
ОБНОВЛЕНИЕ Я попробовал следующее, предложенное Уэйном:
float a = strokeRect.size.width/2;
float b = strokeRect.size.height/2;
float x1,y1,x2,y2,k;
x1=CGRectGetMinX(strokeRect);
y1=CGRectGetMinY(strokeRect);
int maxAngle = 360;
CGContextBeginPath(context);
CGContextMoveToPoint(context, x1, y1);
for(int i=0;i<maxAngle;i+=30){
float cX=cos(DEGREES_TO_RADIANS(i));
float sX=sin(DEGREES_TO_RADIANS(i));
k=1/(sqrt(pow((b*cX),2) + pow(a*sX,2)));
x2=k*a*b*cos(DEGREES_TO_RADIANS(i));
y2=k*a*b*sin(DEGREES_TO_RADIANS(i));
CGContextAddArcToPoint(context, x1, y1, x2, y2, 20);
x1=x2; // make x2 the new x1
y1=y2;
}
CGContextClosePath(context);
CGContextStrokePath(context);
Я вижу некоторые неправильные рисунки, но ничего, что имело бы визуальный смысл.